aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in14
-rw-r--r--lib/elixir.app.src11
-rw-r--r--lib/rebar.config21
-rw-r--r--rebar.config2
4 files changed, 46 insertions, 2 deletions
diff --git a/Makefile.in b/Makefile.in
index c39195ac7..ac8c0b453 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -130,6 +130,7 @@ ifeq "$(IS_REBAR)" "3"
EBINDIR=$(DEPSDIR)/ejabberd/ebin
REBARREL=$(REBAR) as prod tar
REBARDEV=REBAR_PROFILE=dev $(REBAR) release
+ ELIXIR_WARNING="\033[32m===>\033[00m If you get \033[1;91mDependency failure: source for elixir...\033[00m, please run \033[4;37mmake\033[00m again"
else
SKIPDEPS=skip_deps=true
LISTDEPS=-q list-deps
@@ -142,12 +143,23 @@ else
EBINDIR=ebin
REBARREL=$(REBAR) generate
REBARDEV=
+ ELIXIR_WARNING="\033[32m===>\033[00m If you get \033[1;91mERROR: Dependency dir .../elixir failed...\033[00m, please run \033[4;37mmake\033[00m again"
endif
endif
all: deps src
-deps: $(DEPSDIR)/.got
+deps: elixir-rebar $(DEPSDIR)/.got
+
+elixir-rebar:
+ @[ @elixir@ = true ] \
+ && ( [ ! -d $(DEPSDIR)/elixir/ ] \
+ && echo $(ELIXIR_WARNING) \
+ || ( [ ! -f $(DEPSDIR)/elixir/rebar.config ] \
+ && { mkdir $(DEPSDIR)/elixir/src ; \
+ cp lib/elixir.app.src $(DEPSDIR)/elixir/src/ ; \
+ cp lib/rebar.config $(DEPSDIR)/elixir/ ; } \
+ || true ) ) || true
$(DEPSDIR)/.got:
rm -rf $(DEPSDIR)/.got
diff --git a/lib/elixir.app.src b/lib/elixir.app.src
new file mode 100644
index 000000000..b53cbdefc
--- /dev/null
+++ b/lib/elixir.app.src
@@ -0,0 +1,11 @@
+{application, elixir,
+[{description, "elixir"},
+ {vsn, "1.12.0"},
+ {modules, [
+ elixir
+ ]},
+ {registered, [elixir_config, elixir_code_server]},
+ {applications, [kernel,stdlib,compiler]},
+ {mod, {elixir,[]}},
+ {env, [{ansi_enabled, false}]}
+]}.
diff --git a/lib/rebar.config b/lib/rebar.config
new file mode 100644
index 000000000..9154464fa
--- /dev/null
+++ b/lib/rebar.config
@@ -0,0 +1,21 @@
+%% Using Elixir as a Rebar dependency
+
+%% This configuration file only exists so Elixir can be used
+%% as a Rebar dependency, the same happens for the file
+%% src/elixir.app.src.
+
+%% In practice, Elixir is structured as OTP where many applications
+%% are placed in the lib directory. Since this structure is not
+%% supported by default by Rebar, after adding Elixir as a dependency
+%% you need to explicitly add it to lib_dirs:
+%%
+%% {lib_dirs, [
+%% "deps/elixir/lib"
+%% ]}.
+%%
+
+%% Run "make" as the proper compilation step
+{post_hooks, [{compile, "make compile"}]}.
+
+%% This prevents rebar_elixir_plugin from recompiling Elixir
+{ex_opts, [{src_dirs, [".PHONY"]}]}.
diff --git a/rebar.config b/rebar.config
index a125557c6..7d8d57998 100644
--- a/rebar.config
+++ b/rebar.config
@@ -24,7 +24,7 @@
{if_var_true, tools,
{ejabberd_po, ".*", {git, "https://github.com/processone/ejabberd-po", {branch, "main"}}}},
{if_var_true, elixir,
- {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {tag, "v1.4.4"}}}},
+ {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {tag, "v1.12.0"}}}},
{if_var_true, pam,
{epam, ".*", {git, "https://github.com/processone/epam", {tag, "1.0.10"}}}},
{if_var_true, redis,