Browse Source

chore(build): include emqx version as compile info

Zaiming Shi 5 years ago
parent
commit
ddadece0b2
3 changed files with 31 additions and 54 deletions
  1. 0 4
      rebar.config
  2. 31 10
      rebar.config.erl
  3. 0 40
      src/emqx_mod_vsn.erl

+ 0 - 4
rebar.config

@@ -6,14 +6,10 @@
 %% with rebar.config.erl module. Final result is written to
 %% rebar.config.rendered if environment DEBUG is set.
 
-{minimum_otp_vsn, "21.3"}.
 {edoc_opts, [{preprocess,true}]}.
 {erl_opts, [warn_unused_vars,warn_shadow_vars,warn_unused_import,
             warn_obsolete_guard,compressed]}.
 
-{overrides,[{add,[ {extra_src_dirs, [{"etc", [{recursive,true}]}]}
-                 , {erl_opts, [{parse_transform, emqx_mod_vsn}]}]}
-           ]}.
 {extra_src_dirs, [{"etc", [{recursive,true}]}]}.
 
 {xref_checks,[undefined_function_calls,undefined_functions,locals_not_used,

+ 31 - 10
rebar.config.erl

@@ -6,7 +6,7 @@ do(Dir, CONFIG) ->
     ok = compile_and_load_pase_transforms(Dir),
     C1 = deps(CONFIG),
     Config = dialyzer(C1),
-    dump(Config ++ coveralls() ++ config()).
+    dump(Config ++ [{overrides, overrides()}] ++ coveralls() ++ config()).
 
 bcrypt() ->
     {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {branch, "0.6.0"}}}.
@@ -19,6 +19,14 @@ deps(Config) ->
     end,
     lists:keystore(deps, 1, Config, {deps, OldDpes ++ MoreDeps}).
 
+overrides() ->
+    [ {add, [ {extra_src_dirs, [{"etc", [{recursive,true}]}]}
+            , {erl_opts, [ deterministic
+                         , {compile_info, [{emqx_vsn, get_vsn()}]}
+                         ]}
+            ]}
+    ].
+
 config() ->
     [ {plugins, plugins()}
     , {profiles, profiles()}
@@ -51,27 +59,41 @@ test_deps() ->
     , meck
     ].
 
-default_compile_opts() ->
-    [compressed, deterministic, no_debug_info, warnings_as_errors, {parse_transform, emqx_mod_vsn}].
+common_compile_opts() ->
+    [ deterministic
+    , {compile_info, [{emqx_vsn, get_vsn()}]}
+    ].
+
+prod_compile_opts() ->
+    [ compressed
+    , no_debug_info
+    , warnings_as_errors
+    | common_compile_opts()
+    ].
+
+test_compile_opts() ->
+    [ debug_info
+    | common_compile_opts()
+    ].
 
 profiles() ->
-    [ {'emqx',          [ {erl_opts, default_compile_opts()}
+    [ {'emqx',          [ {erl_opts, prod_compile_opts()}
                         , {relx, relx('emqx')}
                         ]}
-    , {'emqx-pkg',      [ {erl_opts, default_compile_opts()}
+    , {'emqx-pkg',      [ {erl_opts, prod_compile_opts()}
                         , {relx, relx('emqx-pkg')}
                         ]}
-    , {'emqx-edge',     [ {erl_opts, default_compile_opts()}
+    , {'emqx-edge',     [ {erl_opts, prod_compile_opts()}
                         , {relx, relx('emqx-edge')}
                         ]}
-    , {'emqx-edge-pkg', [ {erl_opts, default_compile_opts()}
+    , {'emqx-edge-pkg', [ {erl_opts, prod_compile_opts()}
                         , {relx, relx('emqx-edge-pkg')}
                         ]}
-    , {check,           [ {erl_opts, [debug_info, warnings_as_errors, {parse_transform, emqx_mod_vsn}]}
+    , {check,           [ {erl_opts, test_compile_opts()}
                         ]}
     , {test,            [ {deps, test_deps()}
                         , {plugins, test_plugins()}
-                        , {erl_opts, [debug_info, {parse_transform, emqx_mod_vsn}] ++ erl_opts_i()}
+                        , {erl_opts, test_compile_opts() ++ erl_opts_i()}
                         , {extra_src_dirs, [{"test", [{recursive,true}]}]}
                         ]}
     ].
@@ -281,7 +303,6 @@ provide_bcrypt_release(ReleaseType) ->
 compile_and_load_pase_transforms(Dir) ->
     PtFiles =
         [ "apps/emqx_rule_engine/src/emqx_rule_actions_trans.erl"
-        , "src/emqx_mod_vsn.erl"
         ],
     CompileOpts = [verbose,report_errors,report_warnings,return_errors,debug_info],
     lists:foreach(fun(PtFile) -> {ok, _Mod} = compile:file(path(Dir, PtFile), CompileOpts) end, PtFiles).

+ 0 - 40
src/emqx_mod_vsn.erl

@@ -1,40 +0,0 @@
-%%--------------------------------------------------------------------
-%% Copyright (c) 2021 EMQ Technologies Co., Ltd. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%--------------------------------------------------------------------
-
-%% This module provides a parse_transform to inject emqx version number
-%% to all modules as a module attribute.
-%% The module attribute is so far only used for beam reload inspection.
--module(emqx_mod_vsn).
-
--export([parse_transform/2]).
-
-parse_transform(Form, _Opts) ->
-    case os:getenv("PKG_VSN") of
-        false -> Form;
-        Vsn -> trans(Form, {attribute, 1, emqx_vsn, Vsn})
-    end.
-
-trans(Form, Injection) ->
-    trans(Form, Injection, []).
-
-trans([], _Injection, Acc) ->
-    lists:reverse(Acc);
-trans([{eof, _} | _] = EOF, _Injection, Acc) ->
-    lists:reverse(Acc) ++ EOF;
-trans([{attribute, _, module, _} = Module | Form], Injection, Acc) ->
-    lists:reverse(Acc) ++ [Module, Injection | Form];
-trans([H | T], Injection, Acc) ->
-    trans(T, Injection, [H | Acc]).