diff options
author | Badlop <badlop@process-one.net> | 2021-07-15 01:29:35 +0200 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2021-07-16 16:43:08 +0200 |
commit | 937e1c2e373e360fe47e455886d186492248f31f (patch) | |
tree | 1d68d301f3fc72bc9ea5609c8ac5f577218300b5 | |
parent | As 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.in | 14 | ||||
-rw-r--r-- | lib/elixir.app.src | 11 | ||||
-rw-r--r-- | lib/rebar.config | 21 | ||||
-rw-r--r-- | rebar.config | 2 |
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, |