summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2021-07-15 01:29:35 +0200
committerBadlop <badlop@process-one.net>2021-07-16 16:43:08 +0200
commit937e1c2e373e360fe47e455886d186492248f31f (patch)
tree1d68d301f3fc72bc9ea5609c8ac5f577218300b5
parentAs Mix config now must be evaluated at runtime, rename to runtime.exs (diff)
Add workaround so rebar2 can use Elixir 1.12.0
Notice that Elixir 1.12.0 requires Erlang/OTP 21 or higher BTW, this workaround works only with rebar2... unfortunately rebar3 doesn't compile the elixir files from lib/
-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 c39195ac..ac8c0b45 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 00000000..b53cbdef
--- /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 00000000..9154464f
--- /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 a125557c..7d8d5799 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,