Skip to content

Commit a18bf89

Browse files
author
Rodrigo Álvarez
committed
Handle gleam extra_applications
1 parent 16451cd commit a18bf89

File tree

4 files changed

+46
-8
lines changed

4 files changed

+46
-8
lines changed

lib/mix/lib/mix/dep/loader.ex

+26-4
Original file line numberDiff line numberDiff line change
@@ -374,13 +374,17 @@ defmodule Mix.Dep.Loader do
374374
from = Path.join(opts[:dest], "gleam.toml")
375375
deps = Enum.map(config[:deps], &to_dep(&1, from, _manager = nil, locked?))
376376

377-
properties = [
378-
{:vsn, to_charlist(config[:version])},
379-
{:mod, {String.to_atom(config[:mod]), []}}
380-
]
377+
properties =
378+
[{:vsn, to_charlist(config[:version])}]
379+
|> gleam_mod(config)
380+
|> gleam_applications(config)
381381

382382
contents = :io_lib.format("~p.~n", [{:application, dep.app, properties}])
383383

384+
[opts[:build], "ebin"]
385+
|> Path.join()
386+
|> File.mkdir_p!()
387+
384388
[opts[:build], "ebin", "#{dep.app}.app"]
385389
|> Path.join()
386390
|> File.write!(IO.chardata_to_string(contents))
@@ -393,6 +397,24 @@ defmodule Mix.Dep.Loader do
393397
{dep, Enum.map(children, &to_dep(&1, opts[:dest], _manager = nil, locked?))}
394398
end
395399

400+
defp gleam_mod(properties, config) do
401+
case config[:mod] do
402+
nil -> properties
403+
mod -> [{:mod, {String.to_atom(mod), []}} | properties]
404+
end
405+
end
406+
407+
defp gleam_applications(properties, config) do
408+
case config[:extra_applications] do
409+
nil ->
410+
properties
411+
412+
applications ->
413+
applications = Enum.map(applications, &String.to_atom/1)
414+
[{:applications, applications} | properties]
415+
end
416+
end
417+
396418
defp mix_children(config, locked?, opts) do
397419
from = Mix.Project.project_file()
398420

lib/mix/lib/mix/gleam.ex

+10-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule Mix.Gleam do
2525
deps: deps ++ dev_deps
2626
}
2727
|> maybe_gleam_version(json)
28-
|> maybe_application_start_module(json)
28+
|> maybe_erlang_opts(json)
2929
rescue
3030
KeyError ->
3131
Mix.raise("Command \"gleam export package-info\" unexpected format: \n" <> json)
@@ -63,10 +63,16 @@ defmodule Mix.Gleam do
6363
end
6464
end
6565

66-
defp maybe_application_start_module(config, json) do
67-
case get_in(json, ["erlang", "application_start_module"]) do
66+
defp maybe_erlang_opts(config, json) do
67+
config =
68+
case get_in(json, ["erlang", "application_start_module"]) do
69+
nil -> config
70+
mod -> Map.put(config, :mod, mod)
71+
end
72+
73+
case get_in(json, ["erlang", "extra_applications"]) do
6874
nil -> config
69-
mod -> Map.put(config, :mod, mod)
75+
extra_applications -> Map.put(config, :extra_applications, extra_applications)
7076
end
7177
end
7278

lib/mix/test/fixtures/gleam_dep/gleam.toml

+4
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@ gleam_otp = ">= 0.16.1 and < 1.0.0"
1818

1919
[dev-dependencies]
2020
gleeunit = ">= 1.0.0 and < 2.0.0"
21+
22+
[erlang]
23+
extra_applications = ["ssl"]
24+
application_start_module = "gleam_dep@somemodule"

lib/mix/test/mix/gleam_test.exs

+6
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ defmodule Mix.GleamTest do
9696
assert Enum.any?(load_paths, &String.ends_with?(&1, "gleam_stdlib/ebin"))
9797
# Dep of a dep
9898
assert Enum.any?(load_paths, &String.ends_with?(&1, "gleam_erlang/ebin"))
99+
{:ok, content} = :file.consult("_build/dev/lib/gleam_dep/ebin/gleam_dep.app")
100+
101+
assert content == [
102+
{:application, :gleam_dep,
103+
[applications: [:ssl], mod: {:gleam_dep@somemodule, []}, vsn: ~c"1.0.0"]}
104+
]
99105
end)
100106
end
101107
end

0 commit comments

Comments
 (0)