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,