%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ts=4 sw=4 ft=erlang et
%% This is a sample rebar.conf file that shows examples of some of rebar's
%% options.

%% == Core ==

%% Extend list of always recursive commands
{recursive_cmds, []}.

%% Check required ERTS or OTP release version
{require_erts_vsn, ".*"}.
{require_otp_vsn, ".*"}.
{require_min_otp_vsn, ".*"}.

%% Additional library directories to add to the code path
{lib_dirs, []}.

%% == Erlang Compiler ==

%% Erlang files to compile before the rest. Rebar automatically compiles
%% parse_transforms and custom behaviours before anything other than the files
%% in this list.
{erl_first_files, ["src/mymib1.erl", "src/mymib2.erl"]}.

%% Erlang compiler options
{erl_opts, [no_debug_info,
            {i, "myinclude"},
            {src_dirs, ["src", "src2", "src3"]},
            {platform_define,
             "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'},
            {platform_define, "(linux|freebsd)", 'BACKLOG', 128},
            {platform_define, "R13", 'old_inets'}]}.

%% MIB Options?
{mib_opts, []}.

%% SNMP mibs to compile first?
{mib_first_files, []}.

%% leex options
{xrl_opts, []}.

%% leex files to compile first
{xrl_first_files, []}.

%% yecc options
{yrl_opts, []}.

%% yecc files to compile first
{yrl_first_files, []}.

%% == EDoc ==

%% EDoc options
{edoc_opts, []}.

%% == Port Compiler ==

%% Port compilation environment variables. See rebar_port_compiler.erl for
%% more info. Default is `[]'
{port_env, [{"CFLAGS", "$CFLAGS -Ifoo"},
            {"freebsd", "LDFLAGS", "$LDFLAGS -lfoo"}]}.

%% port_specs
%% List of filenames or wildcards to be compiled. May also contain a tuple
%% consisting of a regular expression to be applied against the system
%% architecture as a filter.
{port_specs, [{"priv/so_name.so", ["c_src/*.c"]},
              {"linux", "priv/hello_linux", ["c_src/hello_linux.c"]},
              {"linux", "priv/hello_linux", ["c_src/*.c"], [{env, []}]}]}.

%% == escriptize ==
{escript_name, "application"}.
{escript_incl_apps, []}.
{escript_shebang, "#!/usr/bin/env escript\n"}.
{escript_comment, "%%\n"}.
{escript_emu_args, "%%! -pa application/application/ebin\n"}.

%% == LFE Compiler ==

%% LFE files to compile before the rest
{lfe_first_files, []}.

%% Options for the LFE compiler: reuse {erl_opts, []}

%% == ErlyDTL Compiler ==

%% Options for the ErlyDTL compiler
{erlydtl_opts, []}.

%% == Proto compiler ==
{proto_opts, [
              {compiler, protobuffs},
              {src_dirs, ["src"]}
             ]}.
%% Available compilers for protocol buffer files (*.proto):
%%   protobuffs  (default)
%%   gpb
%% Optional src_dirs which is a list of directories where
%% to look for .proto files, default is src

%% Options for the gpb protocol buffer compiler,
%% if selected by the proto_compiler option
{gpb_opts, []}.

%% == Diameter compiler ==

%% Diameter files to compile before the rest
{dia_first_files, []}.

%% Options for the diameter compiler
{dia_opts, []}.

%% == EUnit ==

%% Options for eunit:test()
{eunit_opts, []}.

%% Additional compile options for eunit. erl_opts is also used
{eunit_compile_opts, []}.

%% Same as erl_first_files, but used only when running 'eunit'
{eunit_first_files, []}.

%% == Cover ==

%% Whether to enable coverage reporting. Default is `false'
{cover_enabled, false}.

%% Whether to print coverage report to console. Default is `false'
{cover_print_enabled, false}.

%% Whether to export coverage report to file. Default is `false'
{cover_export_enabled, false}.

%% == Common Test ==

%% Override the default "test" directory in which SUITEs are located
{ct_dir, "itest"}.

%% Override the default "logs" directory in which SUITEs are logged
{ct_log_dir, "test/logs"}.

%% Option to pass extra parameters when launching Common Test
{ct_extra_params, "-boot start_sasl -s myapp"}.

%% Option to use short names (i.e., -sname test) when starting ct
{ct_use_short_names, true}.

%% Recursively search for .spec files from the test dir, default
%% is false (ie. the search will be from the current working directory)
{ct_search_specs_from_test_dir, true}.

%% == QuickCheck ==

%% If qc_mod is unspecified, rebar tries to detect Triq or EQC
{qc_opts, [{qc_mod, module()}, Options]}.

%% Additional compile options for qc. erl_opts is also used
{qc_compile_opts, []}.

%% Same as erl_first_files, but used only when running 'qc'
{qc_first_files, []}.

%% == Cleanup ==

%% Which files to cleanup
{clean_files, ["file", "file2"]}.

%% == OTP Applications ==

%% Enable validation of the OTP app module list. Default is 'true'
{validate_app_modules, true}.

%% == Dependencies ==

%% Where to put any downloaded dependencies. Default is "deps"
{deps_dir, "deps"}.

%% What dependencies we have, dependencies can be of 3 forms, an application
%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or
%% an application name, a version and the SCM details on how to fetch it (SCM
%% type, location and revision).
%% Rebar currently supports git, hg, bzr, svn, rsync, fossil, and p4.
{deps, [app_name,
        {rebar, "1.0.*"},
        {rebar, ".*",
         {git, "git://github.com/rebar/rebar.git"}},
        {rebar, ".*",
         {git, "git://github.com/rebar/rebar.git", "Rev"}},
        {rebar, "1.0.*",
         {git, "git://github.com/rebar/rebar.git", {branch, "master"}}},
        {rebar, "1.0.0",
         {git, "git://github.com/rebar/rebar.git", {tag, "1.0.0"}}},
        %% Dependencies can be marked as 'raw'. Rebar does not require
        %% such dependencies to have a standard Erlang/OTP layout
        %% which assumes the presence of either
        %% "src/dependency_name.app.src" or "ebin/dependency_name.app"
        %% files.
        %%
        %% 'raw' dependencies can still contain 'rebar.config' and
        %% even can have the proper OTP directory layout, but they
        %% won't be compiled.
        %%
        %% Only a subset of rebar commands will be executed on the
        %% 'raw' subdirectories: get-deps, update-deps, check-deps,
        %% list-deps and delete-deps.
        {rebar, "",
         {git, "git://github.com/rebar/rebar.git", {branch, "master"}},
         [raw]},
        {app_name, ".*", {hg, "https://www.example.org/url"}},
        {app_name, ".*", {rsync, "Url"}},
        {app_name, ".*", {svn, "https://www.example.org/url"}},
        {app_name, ".*", {svn, "svn://svn.example.org/url"}},
        {app_name, ".*", {bzr, "https://www.example.org/url", "Rev"}},
        {app_name, ".*", {fossil, "https://www.example.org/url"}},
        {app_name, ".*", {fossil, "https://www.example.org/url", "Vsn"}},
        {app_name, ".*", {p4, "//depot/subdir/app_dir"}}]}.

%% == Subdirectories ==

%% Subdirectories?
{sub_dirs, ["dir1", "dir2"]}.

%% == Plugins ==

%% Plugins you wish to include.
%% These can include any module on the code path, including deps.
%% Alternatively, plugins can be placed as source files in the plugin_dir, in
%% which case they will be compiled and loaded dynamically at runtime.
{plugins, [plugin1, plugin2]}.

%% Override the directory in which plugin sources can be found.
%% Defaults to ./plugins
{plugin_dir, "some_other_directory"}.


%% == Pre/Post Command Hooks ==

{pre_hooks, [{clean, "./prepare_package_files.sh"},
             {"linux", compile, "c_src/build_linux.sh"},
             {compile, "escript generate_headers"},
             {compile, "escript check_headers"}]}.

{post_hooks, [{clean, "touch file1.out"},
              {"freebsd", compile, "c_src/freebsd_tweaks.sh"},
              {eunit, "touch file2.out"},
              {compile, "touch postcompile.out"}]}.

%% == xref ==

{xref_warnings, false}.

%% optional extra paths to include in xref:set_library_path/2.
%% specified relative location of rebar.config.
%% e.g. {xref_extra_paths,["../gtknode/src"]}
{xref_extra_paths,[]}.

%% xref checks to run
{xref_checks, [undefined_function_calls, undefined_functions,
               locals_not_used, exports_not_used,
               deprecated_function_calls, deprecated_functions]}.

%% Optional custom xref queries (xref manual has details) specified as
%%     {xref_queries, [{query_string(), expected_query_result()},...]}
%% The following for example removes all references to mod:*foo/4
%% functions from undefined external function calls as those are in a
%% generated module
{xref_queries,
 [{"(XC - UC) || (XU - X - B"
   " - (\"mod\":\".*foo\"/\"4\"))",[]}]}.

%% == Dialyzer ==

{dialyzer,
 [
  %% Store PLT locally inside the project in .rebar (Default)
  {plt_location, local},
  %% Store PLT in custom directory
  {plt_location, "custom_dir"},
  %% Extra apps to include in the PLT
  {plt_extra_apps, [app1, app2]},
  {warnings, [unmatched_returns, error_handling]}
 ]}.
