From 88ae489219c03b5075bfcb38cecf98cc507e0557 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Thu, 3 Feb 2022 17:31:47 -0300 Subject: [PATCH 1/2] fix(mix): set `emqx_vsn` compile info Currently, `emqx_release.erl` depends on the `erl_opts` option `compile_info` being set by Rebar3 to include `{emqx_vsn, $PKG_VSN}` to report the version, for instance, in `emqx ctl status`. Since Mix does not provide a simple way to pass `erl_opts` to Rebar3 dependencies without creating a `mix.exs` file, the workaround is to set the environment variable `ERL_COMPILER_OPTIONS` to include that value before invoking the Erlang compiler on the Rebar3 dependencies. --- build | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build b/build index 1e564eee1..eebf26771 100755 --- a/build +++ b/build @@ -240,6 +240,11 @@ export_release_vars() { exit 1 esac export MIX_ENV="$profile" + # At this time, Mix provides no easy way to pass `erl_opts' to + # dependencies. The workaround is to set this variable before + # compiling the project, so that `emqx_release.erl' picks up + # `emqx_vsn' as if it was compiled by rebar3. + export ERL_COMPILER_OPTIONS="[{compile_info,[{emqx_vsn,\"${PKG_VSN}\"}]}]" } log "building artifact=$ARTIFACT for profile=$PROFILE" From 9021b7e9b8c93943598f002dd3defcf588ba0220 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 4 Feb 2022 12:48:52 -0300 Subject: [PATCH 2/2] fix(mix): set enterprise compile flag --- build | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/build b/build index eebf26771..5d98fa026 100755 --- a/build +++ b/build @@ -224,6 +224,12 @@ make_docker_testing() { -f "${DOCKERFILE_TESTING}" . } +function join { + local IFS="$1" + shift + echo "$*" +} + # used to control the Elixir Mix Release output # see docstring in `mix.exs` export_release_vars() { @@ -240,11 +246,22 @@ export_release_vars() { exit 1 esac export MIX_ENV="$profile" + + local erl_opts=() + + if [[ "$profile" = *enterprise* ]] + then + erl_opts+=( "{d,'EMQX_ENTERPRISE'}" ) + fi + # At this time, Mix provides no easy way to pass `erl_opts' to # dependencies. The workaround is to set this variable before # compiling the project, so that `emqx_release.erl' picks up # `emqx_vsn' as if it was compiled by rebar3. - export ERL_COMPILER_OPTIONS="[{compile_info,[{emqx_vsn,\"${PKG_VSN}\"}]}]" + erl_opts+=( "{compile_info,[{emqx_vsn,\"${PKG_VSN}\"}]}" ) + + ERL_COMPILER_OPTIONS="[$(join , "${erl_opts[@]}")]" + export ERL_COMPILER_OPTIONS } log "building artifact=$ARTIFACT for profile=$PROFILE"