pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

py-esptool: Update to 5.0.1



Module Name:	pkgsrc-wip
Committed By:	Frédéric Fauberteau <frederic%fauberteau.org@localhost>
Pushed By:	frederic
Date:		Mon Jul 21 09:53:35 2025 +0200
Changeset:	e9c467a7b795904a84f25299080bde0a0720e73e

Added Files:
	py-esptool/COMMIT_MSG
	py-esptool/DESCR
	py-esptool/Makefile
	py-esptool/PLIST
	py-esptool/distinfo
	py-esptool/patches/patch-esptool_cli__util.py

Log Message:
py-esptool: Update to 5.0.1

Packaged in wip by Frédéric Fauberteau

pkgsrc changes:
---------------
  * Add patch to break the upstream dependency requirement for click<8.2.0
    since devel/py-click is at 8.2.1
    (https://github.com/espressif/esptool/pull/1104).

upstream changes:
-----------------
v5.0.1 (2025-07-15)
Bug Fixes
  * elf2image: validate ELF section types and addresses before processing
    (Jaroslav Burian - 97a1546)
  * elf2image: handle PREINIT_ARRAY section type in ESP32-P4 elf file properly
    (Jaroslav Burian - ec84a75)
  * elf2image: Fix incorrect logger call (Marek Matej - 637f0e6)

v5.0.0 (2025-07-02)
Breaking changes
  * The .py suffix is deprecated for the following scripts:
    o esptool
    o espefuse
    o espsecure
    o esp_rfc2217_server (Peter Dragun - 635cde1)
  * execute-scripts command is removed (Peter Dragun - ff72b26)
New Features
  * espefuse: Use the esptool logger, more concise messages (Radim Karniš - 983338f)
  * espefuse: Replace execute-scripts with public API (Peter Dragun - ff72b26)
  * espefuse: Add public API for espefuse (Peter Dragun - d7da0f8)
  * espefuse: Rename all commands to use dashes and add tests for deprecated commands (Peter Dragun - ade3088)
  * espefuse: Add support for chaining commands with click parser (Peter Dragun - 0a2ea69)
  * espefuse: Refactor CLI and use click for parsing arguments (Peter Dragun - aa80001)
  * espefuse: Adds efuse calculation fields for ESP32-C5 (Konstantin Kondrashov - 9104038)
  * espefuse: Adds 3-bit field for wafer major version in ESP32-P4 (Konstantin Kondrashov - c102510)
  * verbosity: Allow setting silent or verbose output levels (Radim Karniš - 90e3770)
  * efuse: Adds efuses for ESP32-C61 ECO3 (Konstantin Kondrashov - 6146410)
  * espefuse: Support efuse for ESP32-C5 ECO2 (v1.0) (Konstantin Kondrashov - 3726726)
  * espsecure: Use esptool logger, unify output format of messages (Radim Karniš - 905249c)
  * stub_flasher: Support for >16MB flash on P4 and >16MB encrypted writes on S3 (Radim Karniš - 4e6803e)
  * espsecure: Drop ecdsa module, use cryptography instead (Radim Karniš - e132f6f)
  * espsecure: Unify all commands and options to use dash instead of underscore (Peter Dragun - 36325fd)
  * espsecure: Use rich click for CLI parsing (Peter Dragun - 9c7ddc1)
  * targets: Update chip features lists with more info (Radim Karniš - 3c776aa)
  * logging: Add collapsible output stages and ASCII progress bars (Radim Karniš - f3cf107)
  * trace: Update --trace with more info and more readable formatting (Radim Karniš - 0beee77)
  * cli: Commands and options use dashes instead of underscores for uniformity (Peter Dragun - 3cecd6d)
  * cmds: Expand input of all functions to file paths, bytes, or file-like objects (Radim Karniš - 46a9e31)
  * cmds: Allow all functions to both return bytes and write to files (Radim Karniš - 03b84a1)
  * cmds: Polish the public API, unify arg names, pack some args (Radim Karniš - 37a13a9)
  * cmds: Encapsulate logic for running the stub flasher in run_stub (Radim Karniš - 063d9d5)
  * cli: Add click-based CLI interface (Peter Dragun - d40fefa)
  * cmds: Allow commands to output bytes, as well as write to a file (Radim Karniš - 0153b79)
  * cmds: Rework the public API to work as a Python module (Radim Karniš - ba36933)
  * flash_attach: Encapsulate logic for flash attaching and configuration (Radim Karniš - 6e959ef)
  * esp32h4: update the ESP32H4StubLoader (Chen Jichang - f7c78f8)
  * espefuse: Updates esp32h4 efuse table and fixes tests (Konstantin Kondrashov - 3da8c57)
  * esp32h4: add ESP32H4 esptool support (Chen Jichang - bcf5c6e)
  * esp32h21: Add Microsoft UF2 family ID (Radim Karniš - cb0d334)
  * errors: Print errors to STDERR, catch KeyboardInterrupt (Radim Karniš - 0864e17)
  * write_flash: Remove the superfluous --verify option (Radim Karniš - dbf3d1c)
  * logger: Add a custom logger, allow output redirection (Radim Karniš - 1ce02db)
  * image_info: Deprecate the --version 1 output format (Radim Karniš - 3f625c3)
  * Remove .py suffix from scripts (Peter Dragun - 635cde1)
  * detect flash size of Adesto flash chips (Jaroslav Burian - 0b56f85)
  * Add support for k, M suffix for flash size (Peter Dragun - 6f0d779)
  * Rename reset modes to use dash instead of underscore (Peter Dragun - 851919f)
Bug Fixes
  * logger: Turn on smart features in more cases (Jason2866 - 5d5eafb)
  * elf2image: Multiple fixes from 3rd party frameworks (Sylvio Alves - cbd4e9b)
  * stub_flasher: Fix USB-Serial/JTAG mode on C5 ECO2 and C61 ECO3 (Radim Karniš - 1decf86)
  * write_flash: Detect more cases of unresponsive flash, fix failing flash_size check (Radim Karniš - e6bfc3b)
  * stub_flasher: Fix ESP32-C5 ECO2 flashing (Radim Karniš - 3a4c15c)
  * espefuse: Fix output messages for set_flash_voltage (Peter Dragun - daaedf8)
  * espefuse: JTAG_SEL_ENABLE has GPIO34 strapping pin for ESP32P4 (Jan Beran - 78535e4)
  * esp32c5: fix bootloader address (Jaroslav Burian - ec12073)
  * autodetection: Remove the Unsupported detection protocol stage (Radim Karniš - 05553a4)
  * logging: Unify output messages, notes, and warning formatting (Radim Karniš - 07879eb)
  * elf2image: fix elf2image for ram app when sha256 offset not specified (Jaroslav Burian - 6f8ff39)
  * esp32h4: fix h4 chip feature (Chen Jichang - 955943a)
  * image_info: Sanitize app and bootloader info of null bytes (Radim Karniš - 8016455)
  * lint: Correct type annotations issues reported by mypy (Radim Karniš - 0bca550)
  * esptool: Fix efuse base address for esp32h21 (Konstantin Kondrashov - c3d28ee)
  * elf2image: support --flash-mmu-page-config for all chips (Jaroslav Burian - 8be617c)
  * elf2image: Try to correct MMU page size if not specified (Jaroslav Burian - f4fabc5)
  * elf2image: Print correct MMU page size in error message (Jaroslav Burian - 9da4948)
  * logging: Avoid crashes when flushing if sys.stdout is not available (Radim Karniš - 5176b67)
  * enable auto-detection of ESP32-S2 in secure download mode (Jaroslav Burian - c2f5d21)
  * enable ESP32-P4 ECO5 chip detection (Jaroslav Burian - 0b3460f)
  * Do not use padding for merged IntelHex files (Peter Dragun - 08c170b)
  * lock upper version of click to <8.2.0 (Peter Dragun - 5241cba)
  * Add timeout to read_flash to avoid infinite loops (Peter Dragun - f26a7bb)
  * Close the data file after reading the data (Stevan Stevic - 807d02b)
Documentation
  * elf2image: Link an article with Simple Boot explanation (Radim Karniš - 202dfad)
  * logger: Fix custom logger example code (Radim Karniš - 26e86e9)
  * logger: Fix custom logger example code (Radim Karniš - eaaa6b3)
  * Clarify versions in documentation (Peter Dragun - 4586e4b)
  * Remove .py suffix from tool names (Peter Dragun - e9f03ae)
  * Remove espefuse and espsecure migration guide for esp8266 (Peter Dragun - b6e08a3)
  * Update migration guide for espefuse with click parser (Peter Dragun - faf3e22)
  * Add missing esp32-p4 target to supported targets (Peter Dragun - 8b5a5d9)
  * fix targets dropdown in production (Peter Dragun - 2643101)
  * Update autocomplete docs for click-based CLI (Peter Dragun - 89cfa52)
  * fix minor issues and improve vague statements (Peter Dragun - 6d04155)
Code Refactoring
  * cli_mode: Improve CLI mode workflow code (Radim Karniš - 0671d35)
  * stub_class: Make into a mixin to avoid code repetition (Radim Karniš - 83613c8)
Removals
  * make_image: Remove the make_image command in favor of other workflows (Radim Karniš - 955a7c8)
  * beta_targets: Removed support for beta chip targets (Radim Karniš - 8f1c206)
  * Deprecate Python versions 3.7, 3.8 and 3.9 (Peter Dragun - 19f1bee)

v4.9.0 (2025-06-19)
New Features
  * espefuse: Add eFuses for ESP32-C61 ECO3 (Radim Karniš - 98688ab)
  * espefuse: Support efuse for ESP32-C5 ECO2 (v1.0) (Konstantin Kondrashov - ce16054)
  * stub_flasher: Support for >16MB flash on P4 and >16MB encrypted writes on S3 (Radim Karniš - 0110514)
  * espefuse: Updates esp32h4 efuse table and fixes tests (Konstantin Kondrashov - 777c505)
  * esp32h4: add ESP32H4 esptool support (Chen Jichang - edb99bd)
  * esp32h21: Add Microsoft UF2 family ID (Radim Karniš - 74d27ae)
  * watchdog_reset: Add a new watchdog_reset option working even in USB modes (Radim Karniš - d37c38a)
  * espsecure: Improves an error message for encrypt_flash_data and decrypt_flash_data (Konstantin Kondrashov - ef407ed)
  * espefuse: Clean up efuse code for ESP32H2 (Konstantin Kondrashov - 4e922fe)
  * espefuse: Support different efuse table versions for ESP32H2 (Konstantin Kondrashov - d51ecbe)
  * espefuse: Adds efuses for esp32h2 eco5 (Konstantin Kondrashov - 9b74df6)
  * esp32h21: add ESP32H21 esptool support (gaoxu - 92ceff2)
  * esp32-p4: add support for flasher stub in USB OTG mode (Peter Dragun - 804f2db)
  * esp32-c5: Add ECO1 magic number (Radim Karniš - 6cc002c)
  * esp_rfc2217: Improved the logger message format (Jakub Kocka - 39a12a4)
  * espefuse: Adds 3 bit for PSRAM_CAP efuse field (Konstantin Kondrashov - ab2e0bf)
  * espefuse: Adds API for getting block and wafer versions (Konstantin Kondrashov - 111c6c0)
  * espefuse: Adds ADC calibration data for ESP32-C61 (Konstantin Kondrashov - 36d9735)
  * espefuse: Adds ADC calibration data for ESP32-C5 (Konstantin Kondrashov - a903812)
  * espefuse: Adds ADC calibration data for ESP32-P4 (Konstantin Kondrashov - 215e4b8)
  * erase_region: Enable erasing in ROM bootloader and SDM (Radim Karniš - e0deeac)
  * hard_reset: Support custom hard reset sequence configuration (Radim Karniš - 1b15738)
  * print usb mode when output chip info (Jan Beran - 749d1ad)
  * Add new app description segments (Jaroslav Burian - b23e60f)
  * add filtering based on serial number (Jaroslav Burian - 88319db)
  * Add support for Python 3.13 (Radim Karniš - 6abd05d)
Bug Fixes
  * stub_flasher: Fix USB-Serial/JTAG mode on C5 ECO2 and C61 ECO3 (Radim Karniš - 4382f14)
  * write_flash: Detect more cases of unresponsive flash, fix failing flash_size check (Radim Karniš - f83d598)
  * stub_flasher: Fix ESP32-C5 ECO2 flashing (Radim Karniš - bb237bc)
  * espefuse: Fix output messages for set_flash_voltage (Peter Dragun - 759bcc6)
  * espefuse: JTAG_SEL_ENABLE has GPIO34 strapping pin for ESP32P4 (Jan Beran - f6d1833)
  * esp32c5: fix bootloader address (Jaroslav Burian - 83e0973)
  * elf2image: fix elf2image for ram app when sha256 offset not specified (Radim Karniš - 9fd7b7a)
  * esp32h4: Correct ESP32-H4 chip features (Radim Karniš - 5520963)
  * esp32h21: Fix eFuse base address (Radim Karniš - dc05792)
  * elf2image: support --flash-mmu-page-config for all chips (Jaroslav Burian - 54fdc75)
  * elf2image: Try to correct MMU page size if not specified (Jaroslav Burian - d9afa9c)
  * elf2image: Print correct MMU page size in error message (Jaroslav Burian - 447de60)
  * test: Expect the correct module name for Python's 3.14 argparse (Karolina Surma - 98001b7)
  * write_flash: Skip flash_size checks if we can't read flash size (Radim Karniš - 12095b2)
  * save_segment: Adds segment len check the same as bootloader does (Konstantin Kondrashov - a6bceb7)
  * chip_type_verification: Enable in SDM, do not rely on magic numbers (Radim Karniš - 598e07b)
  * esp32-c6: Disable RTC WDT reset to prevent port disappearing (Radim Karniš - d47004e)
  * esp_rfc2217: Fixed keyboard interrupt on Windows and added info for command (Jakub Kocka - 5569aa5)
  * detect_chip: Select correct loader before further operations to avoid silent failures (Jan Beran - 8897ff8)
  * usb_resets: Fix resetting in USB-OTG and USB-Serial/JTAG modes (Radim Karniš - 8298cdc)
  * Do not use padding for merged IntelHex files (Peter Dragun - 739669f)
  * close port when connect fails (Jaroslav Burian - d99c972)
  * Hide missing app info based on IDF version (Jaroslav Burian - d2bca1e)
  * add delay after WDT reset for better stability (Peter Dragun - 188c162)
  * Not reading app description for some SoCs (Jaroslav Burian - 3555fe1)
  * Fix missing newline in output (Jan Beran - 26b676b)
Documentation
  * esptool: Fix reset sequences in documentation (Jan Beran - 92160eb)
  * flash_modes: Correct QIO GPIO pins for all chips (Radim Karniš - 23f11f0)
  * espefuse: Fixed JTAG strapping pin for ESP32-S3 in the help and documentation (Roland Dobai - de1d1ce)
  * scripting: Add example of usage as a Python module (Radim Karniš - d54e59f)
  * esp8266: change boot select pin to IO0 (ChromaLock - c06ce1e)
  * read_flash_sfdp: Fix command formatting (Radim Karniš - ec309bb)
  * spi_connection: Explain which flash chips are supported (Radim Karniš - 6d37e30)
  * fix targets dropdown in production (Peter Dragun - 9201ccd)
  * Point directly to the datasheet for given target (Jan Beran - a32988e)
  * Add ESP32-C5 and ESP32-C61 docs (Radim Karniš - f52c723)

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=e9c467a7b795904a84f25299080bde0a0720e73e

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 py-esptool/COMMIT_MSG                         | 181 +++++++++++++
 py-esptool/DESCR                              |   1 +
 py-esptool/Makefile                           |  31 +++
 py-esptool/PLIST                              | 367 ++++++++++++++++++++++++++
 py-esptool/distinfo                           |   6 +
 py-esptool/patches/patch-esptool_cli__util.py |  24 ++
 6 files changed, 610 insertions(+)

diffs:
diff --git a/py-esptool/COMMIT_MSG b/py-esptool/COMMIT_MSG
new file mode 100644
index 0000000000..36f312d7fb
--- /dev/null
+++ b/py-esptool/COMMIT_MSG
@@ -0,0 +1,181 @@
+py-esptool: Update to 5.0.1
+
+Packaged in wip by Frédéric Fauberteau
+
+pkgsrc changes:
+---------------
+  * Add patch to break the upstream dependency requirement for click<8.2.0
+    since devel/py-click is at 8.2.1
+    (https://github.com/espressif/esptool/pull/1104).
+
+upstream changes:
+-----------------
+v5.0.1 (2025-07-15)
+Bug Fixes
+  * elf2image: validate ELF section types and addresses before processing
+    (Jaroslav Burian - 97a1546)
+  * elf2image: handle PREINIT_ARRAY section type in ESP32-P4 elf file properly
+    (Jaroslav Burian - ec84a75)
+  * elf2image: Fix incorrect logger call (Marek Matej - 637f0e6)
+
+v5.0.0 (2025-07-02)
+Breaking changes
+  * The .py suffix is deprecated for the following scripts:
+    o esptool
+    o espefuse
+    o espsecure
+    o esp_rfc2217_server (Peter Dragun - 635cde1)
+  * execute-scripts command is removed (Peter Dragun - ff72b26)
+New Features
+  * espefuse: Use the esptool logger, more concise messages (Radim Karniš - 983338f)
+  * espefuse: Replace execute-scripts with public API (Peter Dragun - ff72b26)
+  * espefuse: Add public API for espefuse (Peter Dragun - d7da0f8)
+  * espefuse: Rename all commands to use dashes and add tests for deprecated commands (Peter Dragun - ade3088)
+  * espefuse: Add support for chaining commands with click parser (Peter Dragun - 0a2ea69)
+  * espefuse: Refactor CLI and use click for parsing arguments (Peter Dragun - aa80001)
+  * espefuse: Adds efuse calculation fields for ESP32-C5 (Konstantin Kondrashov - 9104038)
+  * espefuse: Adds 3-bit field for wafer major version in ESP32-P4 (Konstantin Kondrashov - c102510)
+  * verbosity: Allow setting silent or verbose output levels (Radim Karniš - 90e3770)
+  * efuse: Adds efuses for ESP32-C61 ECO3 (Konstantin Kondrashov - 6146410)
+  * espefuse: Support efuse for ESP32-C5 ECO2 (v1.0) (Konstantin Kondrashov - 3726726)
+  * espsecure: Use esptool logger, unify output format of messages (Radim Karniš - 905249c)
+  * stub_flasher: Support for >16MB flash on P4 and >16MB encrypted writes on S3 (Radim Karniš - 4e6803e)
+  * espsecure: Drop ecdsa module, use cryptography instead (Radim Karniš - e132f6f)
+  * espsecure: Unify all commands and options to use dash instead of underscore (Peter Dragun - 36325fd)
+  * espsecure: Use rich click for CLI parsing (Peter Dragun - 9c7ddc1)
+  * targets: Update chip features lists with more info (Radim Karniš - 3c776aa)
+  * logging: Add collapsible output stages and ASCII progress bars (Radim Karniš - f3cf107)
+  * trace: Update --trace with more info and more readable formatting (Radim Karniš - 0beee77)
+  * cli: Commands and options use dashes instead of underscores for uniformity (Peter Dragun - 3cecd6d)
+  * cmds: Expand input of all functions to file paths, bytes, or file-like objects (Radim Karniš - 46a9e31)
+  * cmds: Allow all functions to both return bytes and write to files (Radim Karniš - 03b84a1)
+  * cmds: Polish the public API, unify arg names, pack some args (Radim Karniš - 37a13a9)
+  * cmds: Encapsulate logic for running the stub flasher in run_stub (Radim Karniš - 063d9d5)
+  * cli: Add click-based CLI interface (Peter Dragun - d40fefa)
+  * cmds: Allow commands to output bytes, as well as write to a file (Radim Karniš - 0153b79)
+  * cmds: Rework the public API to work as a Python module (Radim Karniš - ba36933)
+  * flash_attach: Encapsulate logic for flash attaching and configuration (Radim Karniš - 6e959ef)
+  * esp32h4: update the ESP32H4StubLoader (Chen Jichang - f7c78f8)
+  * espefuse: Updates esp32h4 efuse table and fixes tests (Konstantin Kondrashov - 3da8c57)
+  * esp32h4: add ESP32H4 esptool support (Chen Jichang - bcf5c6e)
+  * esp32h21: Add Microsoft UF2 family ID (Radim Karniš - cb0d334)
+  * errors: Print errors to STDERR, catch KeyboardInterrupt (Radim Karniš - 0864e17)
+  * write_flash: Remove the superfluous --verify option (Radim Karniš - dbf3d1c)
+  * logger: Add a custom logger, allow output redirection (Radim Karniš - 1ce02db)
+  * image_info: Deprecate the --version 1 output format (Radim Karniš - 3f625c3)
+  * Remove .py suffix from scripts (Peter Dragun - 635cde1)
+  * detect flash size of Adesto flash chips (Jaroslav Burian - 0b56f85)
+  * Add support for k, M suffix for flash size (Peter Dragun - 6f0d779)
+  * Rename reset modes to use dash instead of underscore (Peter Dragun - 851919f)
+Bug Fixes
+  * logger: Turn on smart features in more cases (Jason2866 - 5d5eafb)
+  * elf2image: Multiple fixes from 3rd party frameworks (Sylvio Alves - cbd4e9b)
+  * stub_flasher: Fix USB-Serial/JTAG mode on C5 ECO2 and C61 ECO3 (Radim Karniš - 1decf86)
+  * write_flash: Detect more cases of unresponsive flash, fix failing flash_size check (Radim Karniš - e6bfc3b)
+  * stub_flasher: Fix ESP32-C5 ECO2 flashing (Radim Karniš - 3a4c15c)
+  * espefuse: Fix output messages for set_flash_voltage (Peter Dragun - daaedf8)
+  * espefuse: JTAG_SEL_ENABLE has GPIO34 strapping pin for ESP32P4 (Jan Beran - 78535e4)
+  * esp32c5: fix bootloader address (Jaroslav Burian - ec12073)
+  * autodetection: Remove the Unsupported detection protocol stage (Radim Karniš - 05553a4)
+  * logging: Unify output messages, notes, and warning formatting (Radim Karniš - 07879eb)
+  * elf2image: fix elf2image for ram app when sha256 offset not specified (Jaroslav Burian - 6f8ff39)
+  * esp32h4: fix h4 chip feature (Chen Jichang - 955943a)
+  * image_info: Sanitize app and bootloader info of null bytes (Radim Karniš - 8016455)
+  * lint: Correct type annotations issues reported by mypy (Radim Karniš - 0bca550)
+  * esptool: Fix efuse base address for esp32h21 (Konstantin Kondrashov - c3d28ee)
+  * elf2image: support --flash-mmu-page-config for all chips (Jaroslav Burian - 8be617c)
+  * elf2image: Try to correct MMU page size if not specified (Jaroslav Burian - f4fabc5)
+  * elf2image: Print correct MMU page size in error message (Jaroslav Burian - 9da4948)
+  * logging: Avoid crashes when flushing if sys.stdout is not available (Radim Karniš - 5176b67)
+  * enable auto-detection of ESP32-S2 in secure download mode (Jaroslav Burian - c2f5d21)
+  * enable ESP32-P4 ECO5 chip detection (Jaroslav Burian - 0b3460f)
+  * Do not use padding for merged IntelHex files (Peter Dragun - 08c170b)
+  * lock upper version of click to <8.2.0 (Peter Dragun - 5241cba)
+  * Add timeout to read_flash to avoid infinite loops (Peter Dragun - f26a7bb)
+  * Close the data file after reading the data (Stevan Stevic - 807d02b)
+Documentation
+  * elf2image: Link an article with Simple Boot explanation (Radim Karniš - 202dfad)
+  * logger: Fix custom logger example code (Radim Karniš - 26e86e9)
+  * logger: Fix custom logger example code (Radim Karniš - eaaa6b3)
+  * Clarify versions in documentation (Peter Dragun - 4586e4b)
+  * Remove .py suffix from tool names (Peter Dragun - e9f03ae)
+  * Remove espefuse and espsecure migration guide for esp8266 (Peter Dragun - b6e08a3)
+  * Update migration guide for espefuse with click parser (Peter Dragun - faf3e22)
+  * Add missing esp32-p4 target to supported targets (Peter Dragun - 8b5a5d9)
+  * fix targets dropdown in production (Peter Dragun - 2643101)
+  * Update autocomplete docs for click-based CLI (Peter Dragun - 89cfa52)
+  * fix minor issues and improve vague statements (Peter Dragun - 6d04155)
+Code Refactoring
+  * cli_mode: Improve CLI mode workflow code (Radim Karniš - 0671d35)
+  * stub_class: Make into a mixin to avoid code repetition (Radim Karniš - 83613c8)
+Removals
+  * make_image: Remove the make_image command in favor of other workflows (Radim Karniš - 955a7c8)
+  * beta_targets: Removed support for beta chip targets (Radim Karniš - 8f1c206)
+  * Deprecate Python versions 3.7, 3.8 and 3.9 (Peter Dragun - 19f1bee)
+
+v4.9.0 (2025-06-19)
+New Features
+  * espefuse: Add eFuses for ESP32-C61 ECO3 (Radim Karniš - 98688ab)
+  * espefuse: Support efuse for ESP32-C5 ECO2 (v1.0) (Konstantin Kondrashov - ce16054)
+  * stub_flasher: Support for >16MB flash on P4 and >16MB encrypted writes on S3 (Radim Karniš - 0110514)
+  * espefuse: Updates esp32h4 efuse table and fixes tests (Konstantin Kondrashov - 777c505)
+  * esp32h4: add ESP32H4 esptool support (Chen Jichang - edb99bd)
+  * esp32h21: Add Microsoft UF2 family ID (Radim Karniš - 74d27ae)
+  * watchdog_reset: Add a new watchdog_reset option working even in USB modes (Radim Karniš - d37c38a)
+  * espsecure: Improves an error message for encrypt_flash_data and decrypt_flash_data (Konstantin Kondrashov - ef407ed)
+  * espefuse: Clean up efuse code for ESP32H2 (Konstantin Kondrashov - 4e922fe)
+  * espefuse: Support different efuse table versions for ESP32H2 (Konstantin Kondrashov - d51ecbe)
+  * espefuse: Adds efuses for esp32h2 eco5 (Konstantin Kondrashov - 9b74df6)
+  * esp32h21: add ESP32H21 esptool support (gaoxu - 92ceff2)
+  * esp32-p4: add support for flasher stub in USB OTG mode (Peter Dragun - 804f2db)
+  * esp32-c5: Add ECO1 magic number (Radim Karniš - 6cc002c)
+  * esp_rfc2217: Improved the logger message format (Jakub Kocka - 39a12a4)
+  * espefuse: Adds 3 bit for PSRAM_CAP efuse field (Konstantin Kondrashov - ab2e0bf)
+  * espefuse: Adds API for getting block and wafer versions (Konstantin Kondrashov - 111c6c0)
+  * espefuse: Adds ADC calibration data for ESP32-C61 (Konstantin Kondrashov - 36d9735)
+  * espefuse: Adds ADC calibration data for ESP32-C5 (Konstantin Kondrashov - a903812)
+  * espefuse: Adds ADC calibration data for ESP32-P4 (Konstantin Kondrashov - 215e4b8)
+  * erase_region: Enable erasing in ROM bootloader and SDM (Radim Karniš - e0deeac)
+  * hard_reset: Support custom hard reset sequence configuration (Radim Karniš - 1b15738)
+  * print usb mode when output chip info (Jan Beran - 749d1ad)
+  * Add new app description segments (Jaroslav Burian - b23e60f)
+  * add filtering based on serial number (Jaroslav Burian - 88319db)
+  * Add support for Python 3.13 (Radim Karniš - 6abd05d)
+Bug Fixes
+  * stub_flasher: Fix USB-Serial/JTAG mode on C5 ECO2 and C61 ECO3 (Radim Karniš - 4382f14)
+  * write_flash: Detect more cases of unresponsive flash, fix failing flash_size check (Radim Karniš - f83d598)
+  * stub_flasher: Fix ESP32-C5 ECO2 flashing (Radim Karniš - bb237bc)
+  * espefuse: Fix output messages for set_flash_voltage (Peter Dragun - 759bcc6)
+  * espefuse: JTAG_SEL_ENABLE has GPIO34 strapping pin for ESP32P4 (Jan Beran - f6d1833)
+  * esp32c5: fix bootloader address (Jaroslav Burian - 83e0973)
+  * elf2image: fix elf2image for ram app when sha256 offset not specified (Radim Karniš - 9fd7b7a)
+  * esp32h4: Correct ESP32-H4 chip features (Radim Karniš - 5520963)
+  * esp32h21: Fix eFuse base address (Radim Karniš - dc05792)
+  * elf2image: support --flash-mmu-page-config for all chips (Jaroslav Burian - 54fdc75)
+  * elf2image: Try to correct MMU page size if not specified (Jaroslav Burian - d9afa9c)
+  * elf2image: Print correct MMU page size in error message (Jaroslav Burian - 447de60)
+  * test: Expect the correct module name for Python's 3.14 argparse (Karolina Surma - 98001b7)
+  * write_flash: Skip flash_size checks if we can't read flash size (Radim Karniš - 12095b2)
+  * save_segment: Adds segment len check the same as bootloader does (Konstantin Kondrashov - a6bceb7)
+  * chip_type_verification: Enable in SDM, do not rely on magic numbers (Radim Karniš - 598e07b)
+  * esp32-c6: Disable RTC WDT reset to prevent port disappearing (Radim Karniš - d47004e)
+  * esp_rfc2217: Fixed keyboard interrupt on Windows and added info for command (Jakub Kocka - 5569aa5)
+  * detect_chip: Select correct loader before further operations to avoid silent failures (Jan Beran - 8897ff8)
+  * usb_resets: Fix resetting in USB-OTG and USB-Serial/JTAG modes (Radim Karniš - 8298cdc)
+  * Do not use padding for merged IntelHex files (Peter Dragun - 739669f)
+  * close port when connect fails (Jaroslav Burian - d99c972)
+  * Hide missing app info based on IDF version (Jaroslav Burian - d2bca1e)
+  * add delay after WDT reset for better stability (Peter Dragun - 188c162)
+  * Not reading app description for some SoCs (Jaroslav Burian - 3555fe1)
+  * Fix missing newline in output (Jan Beran - 26b676b)
+Documentation
+  * esptool: Fix reset sequences in documentation (Jan Beran - 92160eb)
+  * flash_modes: Correct QIO GPIO pins for all chips (Radim Karniš - 23f11f0)
+  * espefuse: Fixed JTAG strapping pin for ESP32-S3 in the help and documentation (Roland Dobai - de1d1ce)
+  * scripting: Add example of usage as a Python module (Radim Karniš - d54e59f)
+  * esp8266: change boot select pin to IO0 (ChromaLock - c06ce1e)
+  * read_flash_sfdp: Fix command formatting (Radim Karniš - ec309bb)
+  * spi_connection: Explain which flash chips are supported (Radim Karniš - 6d37e30)
+  * fix targets dropdown in production (Peter Dragun - 9201ccd)
+  * Point directly to the datasheet for given target (Jan Beran - a32988e)
+  * Add ESP32-C5 and ESP32-C61 docs (Radim Karniš - f52c723)
diff --git a/py-esptool/DESCR b/py-esptool/DESCR
new file mode 100644
index 0000000000..59e7cf46fd
--- /dev/null
+++ b/py-esptool/DESCR
@@ -0,0 +1 @@
+This package contains a utility to load firmware into ESP8266 and ESP32 chips.
diff --git a/py-esptool/Makefile b/py-esptool/Makefile
new file mode 100644
index 0000000000..12b7f19441
--- /dev/null
+++ b/py-esptool/Makefile
@@ -0,0 +1,31 @@
+# $NetBSD: Makefile,v 1.19 2025/07/05 11:44:09 wiz Exp $
+
+DISTNAME=	esptool-5.0.1
+PKGNAME=	${PYPKGPREFIX}-${DISTNAME}
+CATEGORIES=	comms python
+MASTER_SITES=	${MASTER_SITE_PYPI:=e/esptool/}
+
+MAINTAINER=	gdt%NetBSD.org@localhost
+HOMEPAGE=	https://github.com/espressif/esptool
+COMMENT=	Firmware tool for ESP8266/ESP32
+LICENSE=	gnu-gpl-v2
+
+TOOL_DEPENDS+=	${PYPKGPREFIX}-setuptools>=78:../../devel/py-setuptools
+DEPENDS+=	${PYPKGPREFIX}-bitstring>=4.2.1:../../devel/py-bitstring
+DEPENDS+=	${PYPKGPREFIX}-click-[0-9]*:../../devel/py-click
+DEPENDS+=	${PYPKGPREFIX}-intelhex-[0-9]*:../../devel/py-intelhex
+DEPENDS+=	${PYPKGPREFIX}-reedsolo>=1.5.3:../../converters/py-reedsolo
+DEPENDS+=	${PYPKGPREFIX}-rich-click-[0-9]*:../../devel/py-rich-click
+DEPENDS+=	${PYPKGPREFIX}-serial>=3.3:../../comms/py-serial
+DEPENDS+=	${PYPKGPREFIX}-yaml>=5.1:../../textproc/py-yaml
+
+USE_LANGUAGES=	# none
+
+PYTHON_SELF_CONFLICT=	yes
+
+PYTHON_VERSIONS_INCOMPATIBLE=	39
+
+PYTHON_VERSIONED_DEPENDENCIES+=	cryptography
+.include "../../lang/python/versioned_dependencies.mk"
+.include "../../lang/python/wheel.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/py-esptool/PLIST b/py-esptool/PLIST
new file mode 100644
index 0000000000..efdd766904
--- /dev/null
+++ b/py-esptool/PLIST
@@ -0,0 +1,367 @@
+@comment $NetBSD$
+bin/esp_rfc2217_server
+bin/esp_rfc2217_server.py
+bin/espefuse
+bin/espefuse.py
+bin/espsecure
+bin/espsecure.py
+bin/esptool
+bin/esptool.py
+${PYSITELIB}/esp_rfc2217_server/__init__.py
+${PYSITELIB}/esp_rfc2217_server/__init__.pyc
+${PYSITELIB}/esp_rfc2217_server/__init__.pyo
+${PYSITELIB}/esp_rfc2217_server/__main__.py
+${PYSITELIB}/esp_rfc2217_server/__main__.pyc
+${PYSITELIB}/esp_rfc2217_server/__main__.pyo
+${PYSITELIB}/esp_rfc2217_server/esp_port_manager.py
+${PYSITELIB}/esp_rfc2217_server/esp_port_manager.pyc
+${PYSITELIB}/esp_rfc2217_server/esp_port_manager.pyo
+${PYSITELIB}/esp_rfc2217_server/redirector.py
+${PYSITELIB}/esp_rfc2217_server/redirector.pyc
+${PYSITELIB}/esp_rfc2217_server/redirector.pyo
+${PYSITELIB}/espefuse/__init__.py
+${PYSITELIB}/espefuse/__init__.pyc
+${PYSITELIB}/espefuse/__init__.pyo
+${PYSITELIB}/espefuse/__main__.py
+${PYSITELIB}/espefuse/__main__.pyc
+${PYSITELIB}/espefuse/__main__.pyo
+${PYSITELIB}/espefuse/cli_util.py
+${PYSITELIB}/espefuse/cli_util.pyc
+${PYSITELIB}/espefuse/cli_util.pyo
+${PYSITELIB}/espefuse/efuse/__init__.py
+${PYSITELIB}/espefuse/efuse/__init__.pyc
+${PYSITELIB}/espefuse/efuse/__init__.pyo
+${PYSITELIB}/espefuse/efuse/base_fields.py
+${PYSITELIB}/espefuse/efuse/base_fields.pyc
+${PYSITELIB}/espefuse/efuse/base_fields.pyo
+${PYSITELIB}/espefuse/efuse/base_operations.py
+${PYSITELIB}/espefuse/efuse/base_operations.pyc
+${PYSITELIB}/espefuse/efuse/base_operations.pyo
+${PYSITELIB}/espefuse/efuse/csv_table_parser.py
+${PYSITELIB}/espefuse/efuse/csv_table_parser.pyc
+${PYSITELIB}/espefuse/efuse/csv_table_parser.pyo
+${PYSITELIB}/espefuse/efuse/emulate_efuse_controller_base.py
+${PYSITELIB}/espefuse/efuse/emulate_efuse_controller_base.pyc
+${PYSITELIB}/espefuse/efuse/emulate_efuse_controller_base.pyo
+${PYSITELIB}/espefuse/efuse/esp32/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32/fields.py
+${PYSITELIB}/espefuse/efuse/esp32/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32/operations.py
+${PYSITELIB}/espefuse/efuse/esp32/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32c2/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32c2/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32c2/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32c2/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32c2/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32c2/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32c2/fields.py
+${PYSITELIB}/espefuse/efuse/esp32c2/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32c2/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32c2/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32c2/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32c2/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32c2/operations.py
+${PYSITELIB}/espefuse/efuse/esp32c2/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32c2/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32c3/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32c3/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32c3/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32c3/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32c3/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32c3/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32c3/fields.py
+${PYSITELIB}/espefuse/efuse/esp32c3/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32c3/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32c3/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32c3/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32c3/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32c3/operations.py
+${PYSITELIB}/espefuse/efuse/esp32c3/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32c3/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32c5/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32c5/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32c5/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32c5/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32c5/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32c5/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32c5/fields.py
+${PYSITELIB}/espefuse/efuse/esp32c5/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32c5/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32c5/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32c5/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32c5/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32c5/operations.py
+${PYSITELIB}/espefuse/efuse/esp32c5/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32c5/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32c6/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32c6/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32c6/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32c6/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32c6/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32c6/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32c6/fields.py
+${PYSITELIB}/espefuse/efuse/esp32c6/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32c6/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32c6/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32c6/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32c6/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32c6/operations.py
+${PYSITELIB}/espefuse/efuse/esp32c6/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32c6/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32c61/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32c61/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32c61/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32c61/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32c61/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32c61/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32c61/fields.py
+${PYSITELIB}/espefuse/efuse/esp32c61/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32c61/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32c61/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32c61/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32c61/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32c61/operations.py
+${PYSITELIB}/espefuse/efuse/esp32c61/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32c61/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32h2/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32h2/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32h2/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32h2/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32h2/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32h2/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32h2/fields.py
+${PYSITELIB}/espefuse/efuse/esp32h2/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32h2/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32h2/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32h2/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32h2/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32h2/operations.py
+${PYSITELIB}/espefuse/efuse/esp32h2/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32h2/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32h21/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32h21/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32h21/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32h21/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32h21/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32h21/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32h21/fields.py
+${PYSITELIB}/espefuse/efuse/esp32h21/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32h21/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32h21/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32h21/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32h21/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32h21/operations.py
+${PYSITELIB}/espefuse/efuse/esp32h21/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32h21/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32h4/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32h4/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32h4/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32h4/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32h4/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32h4/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32h4/fields.py
+${PYSITELIB}/espefuse/efuse/esp32h4/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32h4/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32h4/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32h4/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32h4/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32h4/operations.py
+${PYSITELIB}/espefuse/efuse/esp32h4/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32h4/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32p4/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32p4/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32p4/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32p4/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32p4/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32p4/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32p4/fields.py
+${PYSITELIB}/espefuse/efuse/esp32p4/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32p4/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32p4/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32p4/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32p4/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32p4/operations.py
+${PYSITELIB}/espefuse/efuse/esp32p4/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32p4/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32s2/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32s2/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32s2/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32s2/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32s2/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32s2/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32s2/fields.py
+${PYSITELIB}/espefuse/efuse/esp32s2/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32s2/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32s2/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32s2/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32s2/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32s2/operations.py
+${PYSITELIB}/espefuse/efuse/esp32s2/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32s2/operations.pyo
+${PYSITELIB}/espefuse/efuse/esp32s3/__init__.py
+${PYSITELIB}/espefuse/efuse/esp32s3/__init__.pyc
+${PYSITELIB}/espefuse/efuse/esp32s3/__init__.pyo
+${PYSITELIB}/espefuse/efuse/esp32s3/emulate_efuse_controller.py
+${PYSITELIB}/espefuse/efuse/esp32s3/emulate_efuse_controller.pyc
+${PYSITELIB}/espefuse/efuse/esp32s3/emulate_efuse_controller.pyo
+${PYSITELIB}/espefuse/efuse/esp32s3/fields.py
+${PYSITELIB}/espefuse/efuse/esp32s3/fields.pyc
+${PYSITELIB}/espefuse/efuse/esp32s3/fields.pyo
+${PYSITELIB}/espefuse/efuse/esp32s3/mem_definition.py
+${PYSITELIB}/espefuse/efuse/esp32s3/mem_definition.pyc
+${PYSITELIB}/espefuse/efuse/esp32s3/mem_definition.pyo
+${PYSITELIB}/espefuse/efuse/esp32s3/operations.py
+${PYSITELIB}/espefuse/efuse/esp32s3/operations.pyc
+${PYSITELIB}/espefuse/efuse/esp32s3/operations.pyo
+${PYSITELIB}/espefuse/efuse/mem_definition_base.py
+${PYSITELIB}/espefuse/efuse/mem_definition_base.pyc
+${PYSITELIB}/espefuse/efuse/mem_definition_base.pyo
+${PYSITELIB}/espefuse/efuse/util.py
+${PYSITELIB}/espefuse/efuse/util.pyc
+${PYSITELIB}/espefuse/efuse/util.pyo
+${PYSITELIB}/espefuse/efuse_defs/esp32.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32c2.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32c3.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32c5.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32c6.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32c61.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32h2.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32h21.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32h4.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32p4.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32s2.yaml
+${PYSITELIB}/espefuse/efuse_defs/esp32s3.yaml
+${PYSITELIB}/espefuse/efuse_interface.py
+${PYSITELIB}/espefuse/efuse_interface.pyc
+${PYSITELIB}/espefuse/efuse_interface.pyo
+${PYSITELIB}/espsecure/__init__.py
+${PYSITELIB}/espsecure/__init__.pyc
+${PYSITELIB}/espsecure/__init__.pyo
+${PYSITELIB}/espsecure/__main__.py
+${PYSITELIB}/espsecure/__main__.pyc
+${PYSITELIB}/espsecure/__main__.pyo
+${PYSITELIB}/espsecure/esp_hsm_sign/__init__.py
+${PYSITELIB}/espsecure/esp_hsm_sign/__init__.pyc
+${PYSITELIB}/espsecure/esp_hsm_sign/__init__.pyo
+${PYSITELIB}/espsecure/esp_hsm_sign/exceptions.py
+${PYSITELIB}/espsecure/esp_hsm_sign/exceptions.pyc
+${PYSITELIB}/espsecure/esp_hsm_sign/exceptions.pyo
+${PYSITELIB}/${WHEEL_INFODIR}/METADATA
+${PYSITELIB}/${WHEEL_INFODIR}/RECORD
+${PYSITELIB}/${WHEEL_INFODIR}/WHEEL
+${PYSITELIB}/${WHEEL_INFODIR}/entry_points.txt
+${PYSITELIB}/${WHEEL_INFODIR}/licenses/LICENSE
+${PYSITELIB}/${WHEEL_INFODIR}/top_level.txt
+${PYSITELIB}/esptool/__init__.py
+${PYSITELIB}/esptool/__init__.pyc
+${PYSITELIB}/esptool/__init__.pyo
+${PYSITELIB}/esptool/__main__.py
+${PYSITELIB}/esptool/__main__.pyc
+${PYSITELIB}/esptool/__main__.pyo
+${PYSITELIB}/esptool/bin_image.py
+${PYSITELIB}/esptool/bin_image.pyc
+${PYSITELIB}/esptool/bin_image.pyo
+${PYSITELIB}/esptool/cli_util.py
+${PYSITELIB}/esptool/cli_util.pyc
+${PYSITELIB}/esptool/cli_util.pyo
+${PYSITELIB}/esptool/cmds.py
+${PYSITELIB}/esptool/cmds.pyc
+${PYSITELIB}/esptool/cmds.pyo
+${PYSITELIB}/esptool/config.py
+${PYSITELIB}/esptool/config.pyc
+${PYSITELIB}/esptool/config.pyo
+${PYSITELIB}/esptool/loader.py
+${PYSITELIB}/esptool/loader.pyc
+${PYSITELIB}/esptool/loader.pyo
+${PYSITELIB}/esptool/logger.py
+${PYSITELIB}/esptool/logger.pyc
+${PYSITELIB}/esptool/logger.pyo
+${PYSITELIB}/esptool/reset.py
+${PYSITELIB}/esptool/reset.pyc
+${PYSITELIB}/esptool/reset.pyo
+${PYSITELIB}/esptool/targets/__init__.py
+${PYSITELIB}/esptool/targets/__init__.pyc
+${PYSITELIB}/esptool/targets/__init__.pyo
+${PYSITELIB}/esptool/targets/esp32.py
+${PYSITELIB}/esptool/targets/esp32.pyc
+${PYSITELIB}/esptool/targets/esp32.pyo
+${PYSITELIB}/esptool/targets/esp32c2.py
+${PYSITELIB}/esptool/targets/esp32c2.pyc
+${PYSITELIB}/esptool/targets/esp32c2.pyo
+${PYSITELIB}/esptool/targets/esp32c3.py
+${PYSITELIB}/esptool/targets/esp32c3.pyc
+${PYSITELIB}/esptool/targets/esp32c3.pyo
+${PYSITELIB}/esptool/targets/esp32c5.py
+${PYSITELIB}/esptool/targets/esp32c5.pyc
+${PYSITELIB}/esptool/targets/esp32c5.pyo
+${PYSITELIB}/esptool/targets/esp32c6.py
+${PYSITELIB}/esptool/targets/esp32c6.pyc
+${PYSITELIB}/esptool/targets/esp32c6.pyo
+${PYSITELIB}/esptool/targets/esp32c61.py
+${PYSITELIB}/esptool/targets/esp32c61.pyc
+${PYSITELIB}/esptool/targets/esp32c61.pyo
+${PYSITELIB}/esptool/targets/esp32h2.py
+${PYSITELIB}/esptool/targets/esp32h2.pyc
+${PYSITELIB}/esptool/targets/esp32h2.pyo
+${PYSITELIB}/esptool/targets/esp32h21.py
+${PYSITELIB}/esptool/targets/esp32h21.pyc
+${PYSITELIB}/esptool/targets/esp32h21.pyo
+${PYSITELIB}/esptool/targets/esp32h4.py
+${PYSITELIB}/esptool/targets/esp32h4.pyc
+${PYSITELIB}/esptool/targets/esp32h4.pyo
+${PYSITELIB}/esptool/targets/esp32p4.py
+${PYSITELIB}/esptool/targets/esp32p4.pyc
+${PYSITELIB}/esptool/targets/esp32p4.pyo
+${PYSITELIB}/esptool/targets/esp32s2.py
+${PYSITELIB}/esptool/targets/esp32s2.pyc
+${PYSITELIB}/esptool/targets/esp32s2.pyo
+${PYSITELIB}/esptool/targets/esp32s3.py
+${PYSITELIB}/esptool/targets/esp32s3.pyc
+${PYSITELIB}/esptool/targets/esp32s3.pyo
+${PYSITELIB}/esptool/targets/esp8266.py
+${PYSITELIB}/esptool/targets/esp8266.pyc
+${PYSITELIB}/esptool/targets/esp8266.pyo
+${PYSITELIB}/esptool/targets/stub_flasher/1/.DS_Store
+${PYSITELIB}/esptool/targets/stub_flasher/1/README.md
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32c2.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32c3.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32c5.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32c6.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32c61.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32h2.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32p4.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32s2.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp32s3.json
+${PYSITELIB}/esptool/targets/stub_flasher/1/esp8266.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/LICENSE-APACHE
+${PYSITELIB}/esptool/targets/stub_flasher/2/LICENSE-MIT
+${PYSITELIB}/esptool/targets/stub_flasher/2/README.md
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32c2.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32c3.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32c5.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32c6.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32c61.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32h2.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32p4.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32s2.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp32s3.json
+${PYSITELIB}/esptool/targets/stub_flasher/2/esp8266.json
+${PYSITELIB}/esptool/uf2_writer.py
+${PYSITELIB}/esptool/uf2_writer.pyc
+${PYSITELIB}/esptool/uf2_writer.pyo
+${PYSITELIB}/esptool/util.py
+${PYSITELIB}/esptool/util.pyc
+${PYSITELIB}/esptool/util.pyo
diff --git a/py-esptool/distinfo b/py-esptool/distinfo
new file mode 100644
index 0000000000..127ca78b2f
--- /dev/null
+++ b/py-esptool/distinfo
@@ -0,0 +1,6 @@
+$NetBSD: distinfo,v 1.13 2025/04/15 15:42:11 adam Exp $
+
+BLAKE2s (esptool-5.0.1.tar.gz) = 2169c6115850ba1ecb8979baa19d5936c6974d5ce920078cf93d9aa70702b30f
+SHA512 (esptool-5.0.1.tar.gz) = dc57f1a36ae0689c878d69c97e207e71f3dfc0b6cb551cc2425c0890329d6b2f1200158150c9a3c1f1d310296f07af4db47fe11b85f76e00140e49ade82eb7a2
+Size (esptool-5.0.1.tar.gz) = 373632 bytes
+SHA1 (patch-esptool_cli__util.py) = ed6379945e98a30343df9e3c873a6c563e7ad6ed
diff --git a/py-esptool/patches/patch-esptool_cli__util.py b/py-esptool/patches/patch-esptool_cli__util.py
new file mode 100644
index 0000000000..efafcc7a1d
--- /dev/null
+++ b/py-esptool/patches/patch-esptool_cli__util.py
@@ -0,0 +1,24 @@
+$NetBSD$
+
+Fix use of click >= 8.2.0.
+
+--- esptool/cli_util.py.orig	2025-07-19 20:28:53.595125845 +0000
++++ esptool/cli_util.py
+@@ -155,7 +155,7 @@ class AddrFilenamePairType(click.Path):
+ 
+     name = "addr-filename-pair"
+ 
+-    def get_metavar(self, param):
++    def get_metavar(self, param, ctx=None):
+         return "<address> <filename>"
+ 
+     def convert(
+@@ -294,7 +294,7 @@ class OptionEatAll(click.Option):
+         self._eat_all_parser = None
+         # Set the metavar dynamically based on the type's metavar
+         if self.type and hasattr(self.type, "name"):
+-            self.metavar = f"[{self.type.get_metavar(None) or self.type.name.upper()}]"
++            self.metavar = f"[{self.type.get_metavar(None, None) or self.type.name.upper()}]"
+ 
+     def add_to_parser(self, parser, ctx):
+         def parser_process(value, state):



Home | Main Index | Thread Index | Old Index