about summary refs log tree commit diff
path: root/pkgs/tools/misc/esptool
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/misc/esptool')
-rw-r--r--pkgs/tools/misc/esptool/3.nix63
-rw-r--r--pkgs/tools/misc/esptool/default.nix30
-rw-r--r--pkgs/tools/misc/esptool/test-call-bin-directly.patch89
3 files changed, 163 insertions, 19 deletions
diff --git a/pkgs/tools/misc/esptool/3.nix b/pkgs/tools/misc/esptool/3.nix
new file mode 100644
index 0000000000000..3ffa79b8c8bb2
--- /dev/null
+++ b/pkgs/tools/misc/esptool/3.nix
@@ -0,0 +1,63 @@
+{ lib, fetchFromGitHub, python3, openssl }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "esptool";
+  version = "3.3.2";
+
+  src = fetchFromGitHub {
+    owner = "espressif";
+    repo = "esptool";
+    rev = "v${version}";
+    hash = "sha256-hpPL9KNPA+S57SJoKnQewBCOybDbKep0t5RKw9a9GjM=";
+  };
+
+  postPatch = ''
+    substituteInPlace test/test_imagegen.py \
+      --replace "sys.executable, ESPTOOL_PY" "ESPTOOL_PY"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bitstring
+    cryptography
+    ecdsa
+    pyserial
+    reedsolo
+  ];
+
+  # wrapPythonPrograms will overwrite esptool.py with a bash script,
+  # but espefuse.py tries to import it. Since we don't add any binary paths,
+  # use patchPythonScript directly.
+  dontWrapPythonPrograms = true;
+  postFixup = ''
+    buildPythonPath "$out $pythonPath"
+    for f in $out/bin/*.py; do
+        echo "Patching $f"
+        patchPythonScript "$f"
+    done
+  '';
+
+  checkInputs = with python3.pkgs; [
+    pyelftools
+  ];
+
+  # tests mentioned in `.github/workflows/test_esptool.yml`
+  checkPhase = ''
+    runHook preCheck
+
+    export ESPTOOL_PY=$out/bin/esptool.py
+    ${python3.interpreter} test/test_imagegen.py
+    ${python3.interpreter} test/test_espsecure.py
+    ${python3.interpreter} test/test_merge_bin.py
+    ${python3.interpreter} test/test_modules.py
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "ESP8266 and ESP32 serial bootloader utility";
+    homepage = "https://github.com/espressif/esptool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ hexa ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/esptool/default.nix b/pkgs/tools/misc/esptool/default.nix
index e48e026940525..609c5d74c79e7 100644
--- a/pkgs/tools/misc/esptool/default.nix
+++ b/pkgs/tools/misc/esptool/default.nix
@@ -1,20 +1,22 @@
-{ lib, fetchFromGitHub, python3, openssl }:
+{ lib
+, fetchFromGitHub
+, python3
+}:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "esptool";
-  version = "3.3.1";
+  version = "4.4";
 
   src = fetchFromGitHub {
     owner = "espressif";
     repo = "esptool";
     rev = "v${version}";
-    hash = "sha256-9WmiLji7Zoad5WIzgkpvkI9t96sfdkCtFh6zqVxF7qo=";
+    hash = "sha256-haLwf3loOvqdqQN/iuVBciQ6nCnuc9AqqOGKvDwLBHE=";
   };
 
-  postPatch = ''
-    substituteInPlace test/test_imagegen.py \
-      --replace "sys.executable, ESPTOOL_PY" "ESPTOOL_PY"
-  '';
+  patches = [
+    ./test-call-bin-directly.patch
+  ];
 
   propagatedBuildInputs = with python3.pkgs; [
     bitstring
@@ -24,26 +26,16 @@ python3.pkgs.buildPythonApplication rec {
     reedsolo
   ];
 
-  # wrapPythonPrograms will overwrite esptool.py with a bash script,
-  # but espefuse.py tries to import it. Since we don't add any binary paths,
-  # use patchPythonScript directly.
-  dontWrapPythonPrograms = true;
-  postFixup = ''
-    buildPythonPath "$out $pythonPath"
-    for f in $out/bin/*.py; do
-        echo "Patching $f"
-        patchPythonScript "$f"
-    done
-  '';
-
   checkInputs = with python3.pkgs; [
     pyelftools
+    pytest
   ];
 
   # tests mentioned in `.github/workflows/test_esptool.yml`
   checkPhase = ''
     runHook preCheck
 
+    export ESPSECURE_PY=$out/bin/espsecure.py
     export ESPTOOL_PY=$out/bin/esptool.py
     ${python3.interpreter} test/test_imagegen.py
     ${python3.interpreter} test/test_espsecure.py
diff --git a/pkgs/tools/misc/esptool/test-call-bin-directly.patch b/pkgs/tools/misc/esptool/test-call-bin-directly.patch
new file mode 100644
index 0000000000000..b7d7727800903
--- /dev/null
+++ b/pkgs/tools/misc/esptool/test-call-bin-directly.patch
@@ -0,0 +1,89 @@
+diff --git a/test/test_espsecure.py b/test/test_espsecure.py
+index 25b0b87..627005c 100755
+--- a/test/test_espsecure.py
++++ b/test/test_espsecure.py
+@@ -35,7 +35,7 @@ class EspSecureTestCase:
+         Returns output as a string if there is any,
+         raises an exception if espsecure.py fails
+         """
+-        cmd = [sys.executable, ESPSECURE_PY] + args.split(" ")
++        cmd = [ESPSECURE_PY] + args.split(" ")
+         print("\nExecuting {}...".format(" ".join(cmd)))
+ 
+         try:
+diff --git a/test/test_esptool.py b/test/test_esptool.py
+index 042a1ce..b294e26 100755
+--- a/test/test_esptool.py
++++ b/test/test_esptool.py
+@@ -57,7 +57,10 @@ try:
+     ESPTOOL_PY = os.environ["ESPTOOL_PY"]
+ except KeyError:
+     ESPTOOL_PY = os.path.join(TEST_DIR, "..", "esptool/__init__.py")
+-ESPSECURE_PY = os.path.join(TEST_DIR, "..", "espsecure/__init__.py")
++try:
++    ESPSECURE_PY = os.environ["ESPSECURE_PY"]
++except KeyError:
++    ESPSECURE_PY = os.path.join(TEST_DIR, "..", "espsecure/__init__.py")
+ ESPRFC2217SERVER_PY = os.path.join(TEST_DIR, "..", "esp_rfc2217_server.py")
+ 
+ RETURN_CODE_FATAL_ERROR = 2
+@@ -74,7 +77,6 @@ class ESPRFC2217Server(object):
+     def __init__(self, rfc2217_port=None):
+         self.port = rfc2217_port or self.get_free_port()
+         self.cmd = [
+-            sys.executable,
+             ESPRFC2217SERVER_PY,
+             "-p",
+             str(self.port),
+@@ -130,7 +132,7 @@ class ESPRFC2217Server(object):
+ class EsptoolTestCase:
+     def run_espsecure(self, args):
+ 
+-        cmd = [sys.executable, ESPSECURE_PY] + args.split(" ")
++        cmd = [ESPSECURE_PY] + args.split(" ")
+         print("\nExecuting {}...".format(" ".join(cmd)))
+         try:
+             output = subprocess.check_output(
+@@ -155,7 +157,7 @@ class EsptoolTestCase:
+         Raises an exception if esptool.py fails.
+         """
+         trace_args = ["--trace"] if arg_trace else []
+-        cmd = [sys.executable, ESPTOOL_PY] + trace_args
++        cmd = [ESPTOOL_PY] + trace_args
+         if chip_name or arg_chip is not None and chip_name != "auto":
+             cmd += ["--chip", chip_name or arg_chip]
+         if rfc2217_port or arg_port is not None:
+diff --git a/test/test_imagegen.py b/test/test_imagegen.py
+index a1feec2..01bd59c 100755
+--- a/test/test_imagegen.py
++++ b/test/test_imagegen.py
+@@ -108,7 +108,7 @@ class BaseTestCase:
+         Run esptool.py image_info on a binary file,
+         assert no red flags about contents.
+         """
+-        cmd = [sys.executable, ESPTOOL_PY, "--chip", chip, "image_info", binpath]
++        cmd = [ESPTOOL_PY, "--chip", chip, "image_info", binpath]
+         try:
+             output = subprocess.check_output(cmd)
+             output = output.decode("utf-8")
+@@ -123,7 +123,7 @@ class BaseTestCase:
+ 
+     def run_elf2image(self, chip, elf_path, version=None, extra_args=[]):
+         """Run elf2image on elf_path"""
+-        cmd = [sys.executable, ESPTOOL_PY, "--chip", chip, "elf2image"]
++        cmd = [ESPTOOL_PY, "--chip", chip, "elf2image"]
+         if version is not None:
+             cmd += ["--version", str(version)]
+         cmd += [elf_path] + extra_args
+diff --git a/test/test_merge_bin.py b/test/test_merge_bin.py
+index 8230069..2df5f8c 100755
+--- a/test/test_merge_bin.py
++++ b/test/test_merge_bin.py
+@@ -39,7 +39,6 @@ class TestMergeBin:
+             output_file.close()
+ 
+             cmd = [
+-                sys.executable,
+                 ESPTOOL_PY,
+                 "--chip",
+                 chip,