Skip to content

Commit 6fb0ee6

Browse files
committed
PoC to allow NIFs to be loaded from escripts
1 parent c2b0a77 commit 6fb0ee6

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

rustler_mix/lib/rustler.ex

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,28 @@ defmodule Rustler do
158158
:code.purge(__MODULE__)
159159

160160
{otp_app, path} = @load_from
161+
app_dir = Application.app_dir(otp_app, path)
161162

162163
load_path =
163-
otp_app
164-
|> Application.app_dir(path)
165-
|> to_charlist()
164+
case System.get_env("ESCRIPT_NAME") do
165+
nil ->
166+
app_dir
167+
168+
escript_path ->
169+
if String.starts_with?(app_dir, escript_path) do
170+
tmp = System.tmp_dir!()
171+
:zip.extract(escript_path,
172+
file_list: [Path.join(otp_app |> Atom.to_string(), path)],
173+
cwd: tmp
174+
)
175+
176+
Path.join(tmp, path)
177+
else
178+
app_dir
179+
end
180+
end
166181

167-
:erlang.load_nif(load_path, _construct_load_data())
182+
:erlang.load_nif(load_path |> to_charlist(), _construct_load_data())
168183
end
169184
end
170185
end

0 commit comments

Comments
 (0)