From b5b771d6f9d2066da4a8ac29120d4c44f9a49011 Mon Sep 17 00:00:00 2001 From: Peter M Date: Tue, 18 Mar 2025 18:56:39 +0100 Subject: [PATCH] Fix: Packbeam support `runtime: false` & avoid duplicates Signed-off-by: Peter M --- lib/mix/tasks/packbeam.ex | 7 ++++--- lib/packbeam.ex | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/mix/tasks/packbeam.ex b/lib/mix/tasks/packbeam.ex index 6dd4406..033098d 100644 --- a/lib/mix/tasks/packbeam.ex +++ b/lib/mix/tasks/packbeam.ex @@ -158,10 +158,11 @@ defmodule Mix.Tasks.Atomvm.Packbeam do end end - def runtime_deps(deps) do + def runtime_deps(deps, is_runtime_dep \\ false) do Enum.reduce(deps, [], fn dep, acc -> - if Keyword.get(dep.opts, :runtime, true) do - ["#{dep.opts[:build]}/ebin" | runtime_deps(dep.deps) ++ acc] + if Keyword.get(dep.opts, :runtime, true) and + (is_runtime_dep == true or dep.top_level == true) do + ["#{dep.opts[:build]}/ebin" | runtime_deps(dep.deps, true) ++ acc] else acc end diff --git a/lib/packbeam.ex b/lib/packbeam.ex index eb0cf04..7922f43 100644 --- a/lib/packbeam.ex +++ b/lib/packbeam.ex @@ -130,7 +130,9 @@ defmodule ExAtomVM.PackBEAM do end defp pack_files(modules) do - Enum.reduce_while(modules, {:ok, []}, fn {module, opts}, {:ok, acc} -> + modules + |> Enum.uniq() + |> Enum.reduce_while({:ok, []}, fn {module, opts}, {:ok, acc} -> case pack_file(module, opts) do {:ok, res} -> {:cont, {:ok, [acc | res]}} error -> {:halt, error}