-module(rebar_app_info).
|
|
|
|
-export([new/0,
|
|
new/3,
|
|
name/1,
|
|
name/2,
|
|
config/1,
|
|
config/2,
|
|
app_file_src/1,
|
|
app_file_src/2,
|
|
app_file/1,
|
|
app_file/2,
|
|
app_details/1,
|
|
app_details/2,
|
|
original_vsn/1,
|
|
original_vsn/2,
|
|
ebin_dir/1,
|
|
dir/1,
|
|
dir/2]).
|
|
|
|
-export_type([t/0]).
|
|
|
|
-record(app_info_t, {name :: atom(),
|
|
app_file_src :: file:name() | undefined,
|
|
app_file :: file:name(),
|
|
config :: rebar_config:config() | undefined,
|
|
original_vsn :: string(),
|
|
app_details :: list(),
|
|
dir :: file:name(),
|
|
source :: string() | undefined}).
|
|
|
|
%%============================================================================
|
|
%% types
|
|
%%============================================================================
|
|
-opaque t() :: record(app_info_t).
|
|
|
|
%%============================================================================
|
|
%% API
|
|
%% ============================================================================
|
|
%% @doc Build a new, empty, app info value. This is not of a lot of use and you
|
|
%% probably wont be doing this much.
|
|
-spec new() -> {ok, t()}.
|
|
new() ->
|
|
{ok, #app_info_t{}}.
|
|
|
|
%% @doc build a complete version of the app info with all fields set.
|
|
-spec new(atom(), string(), file:name()) ->
|
|
{ok, t()}.
|
|
new(AppName, Vsn, Dir)
|
|
when erlang:is_atom(AppName) ->
|
|
{ok, #app_info_t{name=AppName,
|
|
original_vsn=Vsn,
|
|
dir=Dir}}.
|
|
|
|
-spec name(t()) -> atom().
|
|
name(#app_info_t{name=Name}) ->
|
|
Name.
|
|
|
|
-spec name(t(), atom()) -> t().
|
|
name(AppInfo=#app_info_t{}, AppName)
|
|
when erlang:is_atom(AppName) ->
|
|
AppInfo#app_info_t{name=AppName}.
|
|
|
|
-spec config(t()) -> rebar_config:confg().
|
|
config(#app_info_t{config=Config}) ->
|
|
Config.
|
|
|
|
-spec config(t(), rebar_config:confg()) -> t().
|
|
config(AppInfo=#app_info_t{}, Config) ->
|
|
AppInfo#app_info_t{config=Config}.
|
|
|
|
-spec app_file_src(t()) -> file:name().
|
|
app_file_src(#app_info_t{app_file_src=AppFileSrc}) ->
|
|
AppFileSrc.
|
|
|
|
-spec app_file_src(t(), file:name()) -> t().
|
|
app_file_src(AppInfo=#app_info_t{}, AppFileSrc) ->
|
|
AppInfo#app_info_t{app_file_src=AppFileSrc}.
|
|
|
|
-spec app_file(t()) -> file:name().
|
|
app_file(#app_info_t{app_file=AppFile}) ->
|
|
AppFile.
|
|
|
|
-spec app_file(t(), file:name()) -> t().
|
|
app_file(AppInfo=#app_info_t{}, AppFile) ->
|
|
AppInfo#app_info_t{app_file=AppFile}.
|
|
|
|
-spec app_details(t()) -> list().
|
|
app_details(#app_info_t{app_details=AppDetails}) ->
|
|
AppDetails.
|
|
|
|
-spec app_details(t(), list()) -> t().
|
|
app_details(AppInfo=#app_info_t{}, AppDetails) ->
|
|
AppInfo#app_info_t{app_details=AppDetails}.
|
|
|
|
-spec original_vsn(t()) -> string().
|
|
original_vsn(#app_info_t{original_vsn=Vsn}) ->
|
|
Vsn.
|
|
|
|
-spec original_vsn(t(), string()) -> string().
|
|
original_vsn(AppInfo=#app_info_t{}, Vsn) ->
|
|
AppInfo#app_info_t{original_vsn=Vsn}.
|
|
|
|
-spec dir(t()) -> file:name().
|
|
dir(#app_info_t{dir=Dir}) ->
|
|
Dir.
|
|
|
|
-spec dir(t(), file:name()) -> t().
|
|
dir(AppInfo=#app_info_t{}, Dir) ->
|
|
AppInfo#app_info_t{dir=Dir}.
|
|
|
|
-spec ebin_dir(t()) -> file:name().
|
|
ebin_dir(#app_info_t{dir=Dir}) ->
|
|
filename:join(Dir, "ebin").
|