{minimum_otp_vsn, "20.1"}.
{base_dir, "_build"}.
{deps_dir, "lib"}.
{root_dir, "."}.
{checkouts_dir, "_checkouts"}.
{plugins_dir, "plugins"}.
{erl_opts, [
    debug_info,
    warnings_as_errors,
    {platform_define, "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'},
    {platform_define, "(linux|freebsd)", 'BACKLOG', 128}
]}.
{validate_app_modules, true}.
{cover_enabled, true}.


{dist_node, [
    {setcookie, 'dev'},
    {name, 'dev@127.0.0.1'}
]}.

{deps, [
]}.

{xref_warnings,false}.
{xref_extra_paths,[]}.
{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used,
              exports_not_used,deprecated_function_calls,
              deprecated_functions]}.

{dialyzer, [{warnings, [unmatched_returns, error_handling]},
            {get_warnings, true},
            {plt_apps, top_level_deps},
            {plt_location, local},
            {plt_prefix, "erbloom"}]}.

{relx, [
    {release, {rocker, "0.1.0"}, [
      rocker
    ]},
    {dev_mode, true},
    {include_src, false},
    {include_erts, false},
    {extended_start_script, true},
    {vm_args, "config/vm.args"},
    {sys_config, "config/sys.config"}
]}.

{pre_hooks, [
  {"(linux|solaris|freebsd)", compile, "sh -c \"cd crates/rocker && cargo build --release && cp target/release/librocker.so ../../priv/\""},
  {"(darwin)", compile, "sh -c \"cd crates/rocker && cargo build --release && cp target/release/librocker.dylib ../../priv/librocker.so\""}
]}.

{profiles, [
    {prod, [
        {erl_opts, [no_debug_info, warnings_as_errors]},
        {relx, [{dev_mode, false}, {include_erts, true}, {include_src, false}]}
    ]},

    {test, [
        {deps, [
            {perftest, ".*", {git, "https://github.com/Vonmo/perftest.git", {branch, "master"}}},
            {uuid, ".*", {git, "https://github.com/okeuday/uuid.git"}}
        ]},
        {erl_opts, [debug_info, warnings_as_errors, nowarn_export_all]},
        {relx, [{dev_mode, true}, {include_erts, false}, {include_src, false}]},
        {overrides, [{override, rocker, [
            {pre_hooks, [
              {"(linux|solaris|freebsd)", compile, "sh -c \"cd crates/rocker && cargo build && cp target/debug/librocker.so ../../priv/\""},
              {"(darwin)", compile, "sh -c \"cd crates/rocker && cargo build && cp target/debug/librocker.dylib ../../priv/librocker.so\""}
            ]}
          ]}
        ]}
    ]},

    {lint,  [
      {plugins, [
        {rebar3_lint, {git, "https://github.com/project-fifo/rebar3_lint.git", {tag, "0.1.2"}}}
      ]}
    ]}
]}.

{plugins, [
    rebar3_auto,
    rebar3_run
    % rebar3_proper
]}.


{elvis_output_format, colors}.
{elvis,
 [#{dirs => ["apps/*/src", "src"],
       filter => "*.erl",
       rules => [{elvis_style, line_length,
                  #{ignore => [],
                    limit => 80,
                    skip_comments => false}},
                 {elvis_style, no_tabs},
                 {elvis_style, no_trailing_whitespace},
                 {elvis_style, macro_names, #{ignore => []}},
                 {elvis_style, macro_module_names},
                 {elvis_style, operator_spaces, #{rules => [{right, ","},
                                                            {right, "++"},
                                                            {left, "++"}]}},
                 {elvis_style, nesting_level, #{level => 3}},
                 {elvis_style, god_modules,
                  #{limit => 25,
                    ignore => []}},
                 {elvis_style, no_if_expression},
                 {elvis_style, invalid_dynamic_call,
                  #{ignore => []}},
                 {elvis_style, used_ignored_variable},
                 {elvis_style, no_behavior_info},
                 {
                   elvis_style,
                   module_naming_convention,
                   #{regex => "^[a-z]([a-z0-9]*_?)*(_SUITE)?$",
                     ignore => []}
                 },
                 {
                   elvis_style,
                   function_naming_convention,
                   #{regex => "^([a-z][a-z0-9]*_?)*$"}
                 },
                 {elvis_style, state_record_and_type},
                 {elvis_style, no_spec_with_records},
                 {elvis_style, dont_repeat_yourself, #{min_complexity => 10}},
                 {elvis_style, no_debug_call, #{ignore => []}}
                ]
      },
     #{dirs => ["."],
       filter => "Makefile",
       rules => [{elvis_project, no_deps_master_erlang_mk, #{ignore => []}},
                 {elvis_project, protocol_for_deps_erlang_mk, #{ignore => []}}]
      },
     #{dirs => ["."],
       filter => "rebar.config",
       rules => [{elvis_project, no_deps_master_rebar, #{ignore => []}},
                 {elvis_project, protocol_for_deps_rebar, #{ignore => []}}]
      }
    ]
}.
