idf-build-apps 2.13.3__py3-none-any.whl → 2.14.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  """
@@ -8,7 +8,7 @@ Tools for building ESP-IDF related apps.
8
8
  # ruff: noqa: E402
9
9
  # avoid circular imports
10
10
 
11
- __version__ = '2.13.3'
11
+ __version__ = '2.14.0'
12
12
 
13
13
  from .session_args import (
14
14
  SessionArgs,
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from .main import (
idf_build_apps/app.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import copy
@@ -511,7 +511,9 @@ class App(BaseModel):
511
511
  BuildStatus.UNKNOWN,
512
512
  BuildStatus.SHOULD_BE_BUILT,
513
513
  ):
514
- self.build_comment = f'Build {self.build_status.value}. Skipping...'
514
+ if not self.build_comment:
515
+ self.build_comment = f'Build {self.build_status.value}. Skipping...'
516
+
515
517
  return
516
518
 
517
519
  # real build starts here
idf_build_apps/args.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import argparse
@@ -302,6 +302,19 @@ class DependencyDrivenBuildArguments(GlobalArguments):
302
302
  ),
303
303
  default=None, # type: ignore
304
304
  )
305
+ common_components: t.Optional[t.List[str]] = field(
306
+ FieldMetadata(
307
+ validate_method=[ValidateMethod.TO_LIST],
308
+ type=semicolon_separated_str_to_list,
309
+ shorthand='-rc',
310
+ ),
311
+ description='semicolon-separated list of components. '
312
+ 'expand the `- *common_components` placeholder in manifests. '
313
+ 'Must be specified together with --modified-components. '
314
+ 'If set to "", the value would be considered as None. '
315
+ 'If set to ";", the value would be considered as an empty list.',
316
+ default=None, # type: ignore
317
+ )
305
318
  deactivate_dependency_driven_build_by_filepatterns: t.Optional[t.List[str]] = field(
306
319
  FieldMetadata(
307
320
  validate_method=[ValidateMethod.TO_LIST],
@@ -374,6 +387,7 @@ class DependencyDrivenBuildArguments(GlobalArguments):
374
387
  App.MANIFEST = Manifest.from_files(
375
388
  self.manifest_files,
376
389
  root_path=to_absolute_path(self.manifest_rootpath),
390
+ common_components=self.common_components,
377
391
  )
378
392
 
379
393
  @property
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import os
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import enum
idf_build_apps/finder.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import logging
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from .report import (
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  """
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import os
idf_build_apps/log.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import logging
idf_build_apps/main.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # PYTHON_ARGCOMPLETE_OK
2
2
 
3
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
3
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
 
6
6
  import argparse
@@ -386,23 +386,26 @@ def main():
386
386
  sys.exit(0)
387
387
 
388
388
  kwargs = vars(args)
389
+ kwargs_without_none = drop_none_kwargs(kwargs)
389
390
  action = kwargs.pop('action')
390
391
  config_file = kwargs.pop('config_file')
391
392
  if config_file:
392
393
  apply_config_file(config_file)
393
394
 
394
395
  if action == 'dump-manifest-sha':
395
- arguments = DumpManifestShaArguments(**drop_none_kwargs(kwargs))
396
+ arguments = DumpManifestShaArguments(**kwargs_without_none)
396
397
  Manifest.from_files(arguments.manifest_files).dump_sha_values(arguments.output)
397
398
  sys.exit(0)
398
- elif action == 'find':
399
- arguments = FindArguments(**drop_none_kwargs(kwargs))
399
+
400
+ if action == 'find':
401
+ arguments = FindArguments(**kwargs_without_none)
400
402
  else:
401
- arguments = BuildArguments(**drop_none_kwargs(kwargs))
403
+ arguments = BuildArguments(**kwargs_without_none)
402
404
 
403
405
  # real call starts here
404
406
  # build also needs to find first
405
- apps = find_apps(args.paths, args.target, find_arguments=arguments)
407
+ apps = find_apps(args.paths, args.target, find_arguments=FindArguments.model_validate(kwargs_without_none))
408
+
406
409
  if isinstance(arguments, FindArguments): # find only
407
410
  if arguments.output:
408
411
  os.makedirs(os.path.dirname(os.path.realpath(arguments.output)), exist_ok=True)
@@ -444,6 +447,12 @@ def main():
444
447
  for app in failed_apps:
445
448
  print(f' {app}')
446
449
 
450
+ disabled_apps = [app for app in apps if app.build_status == BuildStatus.DISABLED]
451
+ if disabled_apps:
452
+ print('Disabled the following apps:')
453
+ for app in disabled_apps:
454
+ print(f' {app}')
455
+
447
456
  if ret_code != 0:
448
457
  sys.exit(ret_code)
449
458
 
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  """
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
  import contextvars
4
4
  import logging
@@ -45,7 +45,7 @@ class IfClause:
45
45
  try:
46
46
  self.stmt: BoolStmt = parse_bool_expr(stmt)
47
47
  self._stmt: str = stmt
48
- except (ParseException, InvalidIfClause) as ex:
48
+ except (ParseException, InvalidIfClause, AttributeError) as ex:
49
49
  raise InvalidIfClause(f'Invalid if clause: {stmt}. {ex}')
50
50
 
51
51
  self.temporary = temporary
@@ -342,12 +342,19 @@ class Manifest:
342
342
  self._rule_paths = {rule.folder: rule for rule in self.rules}
343
343
 
344
344
  @classmethod
345
- def from_files(cls, paths: t.Iterable[PathLike], *, root_path: str = os.curdir) -> 'Manifest':
345
+ def from_files(
346
+ cls,
347
+ paths: t.Iterable[PathLike],
348
+ *,
349
+ root_path: str = os.curdir,
350
+ common_components: t.Optional[t.Sequence[str]] = None,
351
+ ) -> 'Manifest':
346
352
  """
347
353
  Create a Manifest instance from multiple manifest files
348
354
 
349
355
  :param paths: manifest file paths
350
356
  :param root_path: root path for relative paths in manifest files
357
+ :param common_components: sequence of strings to expand the ``- *common_components`` placeholder in manifests
351
358
  :return: Manifest instance
352
359
  """
353
360
  # folder, defined as dict
@@ -356,7 +363,7 @@ class Manifest:
356
363
  rules: t.List[FolderRule] = []
357
364
  for path in paths:
358
365
  LOGGER.debug('Loading manifest file %s', path)
359
- _manifest = cls.from_file(path, root_path=root_path)
366
+ _manifest = cls.from_file(path, root_path=root_path, common_components=common_components)
360
367
 
361
368
  for rule in _manifest.rules:
362
369
  if rule.folder in _known_folders:
@@ -373,15 +380,22 @@ class Manifest:
373
380
  return Manifest(rules, root_path=root_path)
374
381
 
375
382
  @classmethod
376
- def from_file(cls, path: PathLike, *, root_path: str = os.curdir) -> 'Manifest':
383
+ def from_file(
384
+ cls,
385
+ path: PathLike,
386
+ *,
387
+ root_path: str = os.curdir,
388
+ common_components: t.Optional[t.Sequence[str]] = None,
389
+ ) -> 'Manifest':
377
390
  """
378
391
  Create a Manifest instance from a manifest file
379
392
 
380
393
  :param path: path to the manifest file
381
394
  :param root_path: root path for relative paths in manifest file
395
+ :param common_components: sequence of strings to expand the ``{{root_components}}`` placeholder in manifests
382
396
  :return: Manifest instance
383
397
  """
384
- manifest_dict = parse(path)
398
+ manifest_dict = parse(path, common_components=common_components)
385
399
 
386
400
  rules: t.List[FolderRule] = []
387
401
  for folder, folder_rule in manifest_dict.items():
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import esp_bool_parser
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import logging
idf_build_apps/utils.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import fnmatch
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from .parser import (
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import typing as t
@@ -62,8 +62,41 @@ def parse_postfixes(manifest_dict: t.Dict):
62
62
  manifest_dict[folder] = updated_folder
63
63
 
64
64
 
65
- def parse(path: PathLike) -> t.Dict:
66
- with open(path) as f:
67
- manifest_dict = yaml.safe_load(f) or {}
65
+ def flatten_common_components(manifest_dict: t.Dict):
66
+ """
67
+ Flattens nested lists under `depends_components` into a single list of strings.
68
+ """
69
+
70
+ for folder, folder_rule in manifest_dict.items():
71
+ if not isinstance(folder_rule, t.Dict):
72
+ continue
73
+
74
+ depends = folder_rule.get('depends_components')
75
+ if not isinstance(depends, t.List):
76
+ continue
77
+
78
+ flattened: t.List[str] = []
79
+ for item in depends:
80
+ if isinstance(item, t.List):
81
+ flattened.extend(map(str, item))
82
+ else:
83
+ flattened.append(item)
84
+
85
+ folder_rule['depends_components'] = flattened
86
+
87
+
88
+ def parse(path: PathLike, *, common_components: t.Optional[t.Sequence[str]] = None) -> t.Dict:
89
+ common_components_yaml = (
90
+ '.common_components: &common_components\n' + '\n'.join(f' - {component}' for component in common_components)
91
+ if common_components
92
+ else ''
93
+ )
94
+
95
+ with open(path, encoding='utf-8') as f:
96
+ user_yaml = f.read()
97
+
98
+ manifest_dict = yaml.safe_load(f'{common_components_yaml}\n{user_yaml}') or {}
99
+
100
+ flatten_common_components(manifest_dict)
68
101
  parse_postfixes(manifest_dict)
69
102
  return manifest_dict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: idf-build-apps
3
- Version: 2.13.3
3
+ Version: 2.14.0
4
4
  Summary: Tools for building ESP-IDF related apps.
5
5
  Author-email: Fu Hanxi <fuhanxi@espressif.com>
6
6
  Requires-Python: >=3.7
@@ -0,0 +1,27 @@
1
+ idf_build_apps/__init__.py,sha256=aPohj9cU8yfQCqYn7wKsJDjVMUJq6A__07PNoAFUHbs,711
2
+ idf_build_apps/__main__.py,sha256=xbvcgp3sNxXZZ0MMr9XU12TjdzHBWq6DF1FYUSmAjHE,182
3
+ idf_build_apps/app.py,sha256=_B4kCTCUq7mSd6T-VwtLbBM9iHSpXRpfM0vmrznkjYo,40223
4
+ idf_build_apps/args.py,sha256=sdp7eI33BXKmqucs60sS0kK8l5p4fRpRS6H7Y0XyITY,40803
5
+ idf_build_apps/autocompletions.py,sha256=UbswHAWRvqvq4TgDBFjqHGlDLS_NEBM8EE0LlLUYY0A,2143
6
+ idf_build_apps/constants.py,sha256=CW7vKXV6brsNLWeGLNCoDj28r5GO9So3RFNqgk_X2CI,2166
7
+ idf_build_apps/finder.py,sha256=eSIr-y5yPTInQk5IQHggRJyxOndciexaNzpU4VVhfQQ,5833
8
+ idf_build_apps/log.py,sha256=2aJRqx3hPT9IhSv3RLkXR5j7PgB2RX47G766c4i_m5c,3899
9
+ idf_build_apps/main.py,sha256=B5yb6cy5UgqHP8-f7VEc9CrbkQmWGEpf6ww70MC_1z8,18255
10
+ idf_build_apps/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ idf_build_apps/session_args.py,sha256=BMWfW48hHHt5UsAbzTJ9BMnerVP5lnulb0h3Db-BNC8,2973
12
+ idf_build_apps/utils.py,sha256=YAVIYTvz86G--qjh58H376taQ-qe1PbebXcWxYNdnFs,10976
13
+ idf_build_apps/junit/__init__.py,sha256=ZFbtFP4nrRUsN_7rdCYWPZRSAYH_OXetZyd3JGv71bs,231
14
+ idf_build_apps/junit/report.py,sha256=SUQ7VQwc4zUUwLt6srVncvue9iswIFm7AHOao7umyo4,6565
15
+ idf_build_apps/junit/utils.py,sha256=bmrCn44DH3b_LrlKTN7t7l94ttEmitiwVGVBrCQC1yo,1303
16
+ idf_build_apps/manifest/__init__.py,sha256=Fze5wbperMK1F35KXnkAEc93u-ldDl7eQQkv75DoJ18,479
17
+ idf_build_apps/manifest/manifest.py,sha256=UG6t7l9BNmZ223pl674-gSpBgUos3wwHPWwO9Y7-R0A,18580
18
+ idf_build_apps/manifest/soc_header.py,sha256=vBO8oDEIIcxWRCDOPNXtqHKU0yv8q4yMrTo22W55iNw,177
19
+ idf_build_apps/vendors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ idf_build_apps/vendors/pydantic_sources.py,sha256=cxSIPRc3eI5peVMhDxwf58YaGhuG4SCwPRVX2znFEek,4553
21
+ idf_build_apps/yaml/__init__.py,sha256=lbBz5r6hp8dSsxIypGFcc5EbXgWw2codDmky8QCo-sg,167
22
+ idf_build_apps/yaml/parser.py,sha256=qlPZbLOM48CFs4F8i83Sa0QAl8AA-DQceWozTE_CkHM,3191
23
+ idf_build_apps-2.14.0.dist-info/entry_points.txt,sha256=3pVUirUEsb6jsDRikkQWNUt4hqLK2ci1HvW_Vf8b6uE,59
24
+ idf_build_apps-2.14.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
25
+ idf_build_apps-2.14.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
26
+ idf_build_apps-2.14.0.dist-info/METADATA,sha256=Zo3oJH3A2BCUuQmQ67mhFNw68LrXWfJvDwP5SngpIp4,4795
27
+ idf_build_apps-2.14.0.dist-info/RECORD,,
@@ -1,27 +0,0 @@
1
- idf_build_apps/__init__.py,sha256=ZxK4NQEmF-i7Ky7S7vMUuYokfUSr-JyUo70xIHbBueI,711
2
- idf_build_apps/__main__.py,sha256=pT6OsFQRjCw39Jg43HAeGKzq8h5E_0m7kHDE2QMqDe0,182
3
- idf_build_apps/app.py,sha256=iMu2m20O7vMpHWWQv107pjtqIJXMT-0Je3uWeWznfog,40179
4
- idf_build_apps/args.py,sha256=e9d4kxv2q7SEOF42rWn-GS9EfIYYLaMxNUagJ8SPGzk,40140
5
- idf_build_apps/autocompletions.py,sha256=2fZQxzgZ21ie_2uk-B-7-xWYCChfOSgRFRYb7I2Onfo,2143
6
- idf_build_apps/constants.py,sha256=2iwLPZRhSQcn1v4RAcOJnHbqp1fDTp6A1gHaxn5ciTE,2166
7
- idf_build_apps/finder.py,sha256=CKppfxa-nPedHKXfyQ841q1DZc0BimVulXK52EfCD0o,5833
8
- idf_build_apps/log.py,sha256=15sSQhv9dJsHShDR2KgFGFp8ByjV0HogLr1X1lHYqGs,3899
9
- idf_build_apps/main.py,sha256=P_TsUA2s048qcRb-wVngF-zqNjH_NEYrQsAYKB1GHmU,17960
10
- idf_build_apps/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- idf_build_apps/session_args.py,sha256=1B7e3M9_eKdQezGNXaocqCq7iE4MOxpYJkfanCfdkDE,2973
12
- idf_build_apps/utils.py,sha256=YJZOXIpo3aoRkGZJoQUJHAPWi2VkTDAVzQG5DI2igxw,10976
13
- idf_build_apps/junit/__init__.py,sha256=ljILW1rfeBAIlwZIw8jstYrVbugErlmCYzSzJwNFC2I,231
14
- idf_build_apps/junit/report.py,sha256=yzt5SiJEA_AUlw2Ld23J7enYlfDluvmKAcCnAM8ccqE,6565
15
- idf_build_apps/junit/utils.py,sha256=idBrLgsz6Co2QUQqq1AiyzRHnqbJf_EoykEAxCkjHZw,1303
16
- idf_build_apps/manifest/__init__.py,sha256=CP4_LSkh7sb_DsWLSzqkSZ3UojyVdM10bX9avlmn2pg,479
17
- idf_build_apps/manifest/manifest.py,sha256=i8bXxyHeIFxYN5Z1l0dNNBFdgP7SKl3t0TCVqhlF0Lo,18051
18
- idf_build_apps/manifest/soc_header.py,sha256=_F6H5-HP6ateAqKUGlRGH-SUtQ8NJ1RI0hBeCFvsDYA,172
19
- idf_build_apps/vendors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- idf_build_apps/vendors/pydantic_sources.py,sha256=cxSIPRc3eI5peVMhDxwf58YaGhuG4SCwPRVX2znFEek,4553
21
- idf_build_apps/yaml/__init__.py,sha256=R6pYasVsD31maeZ4dWRZnS10hwzM7gXdnfzDsOIRJ-4,167
22
- idf_build_apps/yaml/parser.py,sha256=IhY7rCWXOxrzzgEiKipTdPs_8yXDf8JZr-sMewV1pk8,2133
23
- idf_build_apps-2.13.3.dist-info/entry_points.txt,sha256=3pVUirUEsb6jsDRikkQWNUt4hqLK2ci1HvW_Vf8b6uE,59
24
- idf_build_apps-2.13.3.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
25
- idf_build_apps-2.13.3.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
26
- idf_build_apps-2.13.3.dist-info/METADATA,sha256=qKTCSUSpN6ap36s9qCJGa8brz0_Nq05hkGKalJOPr6o,4795
27
- idf_build_apps-2.13.3.dist-info/RECORD,,