- -module(rebar_app_info).
-
- -export([new/1,
- new/2,
- new/3,
- new/4,
- discover/1,
- 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,
- applications/1,
- applications/2,
- profiles/1,
- profiles/2,
- deps/1,
- deps/2,
- dep_level/1,
- dep_level/2,
- dir/1,
- dir/2,
- source/1,
- source/2,
- state/1,
- state/2,
- valid/1,
- valid/2]).
-
- -export_type([t/0]).
-
- -record(app_info_t, {name :: binary(),
- app_file_src :: file:filename_all() | undefined,
- app_file :: file:filename_all() | undefined,
- config :: rebar_state:t() | undefined,
- original_vsn :: binary() | string() | undefined,
- app_details=[] :: list(),
- applications=[] :: list(),
- deps=[] :: list(),
- profiles=[default] :: atom(),
- dep_level=0 :: integer(),
- dir :: file:name(),
- source :: string() | tuple() | undefined,
- state :: rebar_state:t() | undefined,
- valid :: boolean()}).
-
- %%============================================================================
- %% types
- %%============================================================================
- -type 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(atom() | binary() | string()) ->
- {ok, t()}.
- new(AppName) ->
- {ok, #app_info_t{name=ec_cnv:to_binary(AppName)}}.
-
- -spec new(atom() | binary() | string(), binary() | string()) ->
- {ok, t()}.
- new(AppName, Vsn) ->
- {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
- original_vsn=Vsn}}.
-
- %% @doc build a complete version of the app info with all fields set.
- -spec new(atom() | binary() | string(), binary() | string(), file:name()) ->
- {ok, t()}.
- new(AppName, Vsn, Dir) ->
- {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
- original_vsn=Vsn,
- dir=Dir}}.
-
- %% @doc build a complete version of the app info with all fields set.
- -spec new(atom() | binary() | string(), binary() | string(), file:name(), list()) ->
- {ok, t()}.
- new(AppName, Vsn, Dir, Deps) ->
- {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
- original_vsn=Vsn,
- dir=Dir,
- deps=Deps}}.
-
- %% @doc discover a complete version of the app info with all fields set.
- -spec discover(file:filename_all()) -> {ok, t()} | not_found.
- discover(Dir) ->
- case rebar_app_discover:find_app(Dir, all) of
- {true, AppInfo} ->
- {ok, AppInfo};
- false ->
- not_found
- end.
-
- -spec name(t()) -> binary().
- name(#app_info_t{name=Name}) ->
- Name.
-
- -spec name(t(), atom() | binary() | string()) -> t().
- name(AppInfo=#app_info_t{}, AppName) ->
- AppInfo#app_info_t{name=ec_cnv:to_binary(AppName)}.
-
- -spec config(t()) -> rebar_state:t().
- config(#app_info_t{config=Config}) ->
- Config.
-
- -spec config(t(), rebar_state:t()) -> t().
- config(AppInfo=#app_info_t{}, Config) ->
- AppInfo#app_info_t{config=Config}.
-
- -spec app_file_src(t()) -> file:filename_all() | undefined.
- app_file_src(#app_info_t{app_file_src=undefined, dir=Dir, name=Name}) ->
- AppFileSrc = filename:join([ec_cnv:to_list(Dir), "src", ec_cnv:to_list(Name)++".app.src"]),
- case filelib:is_file(AppFileSrc) of
- true ->
- AppFileSrc;
- false ->
- undefined
- end;
- app_file_src(#app_info_t{app_file_src=AppFileSrc}) ->
- ec_cnv:to_list(AppFileSrc).
-
- -spec app_file_src(t(), file:filename_all()) -> t().
- app_file_src(AppInfo=#app_info_t{}, AppFileSrc) ->
- AppInfo#app_info_t{app_file_src=ec_cnv:to_list(AppFileSrc)}.
-
- -spec app_file(t()) -> file:filename_all() | undefined.
- app_file(#app_info_t{app_file=undefined, dir=Dir, name=Name}) ->
- AppFile = filename:join([ec_cnv:to_list(Dir), "ebin", ec_cnv:to_list(Name)++".app"]),
- case filelib:is_file(AppFile) of
- true ->
- AppFile;
- false ->
- undefined
- end;
- app_file(#app_info_t{app_file=AppFile}) ->
- AppFile.
-
- -spec app_file(t(), file:filename_all()) -> 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()) -> t().
- original_vsn(AppInfo=#app_info_t{}, Vsn) ->
- AppInfo#app_info_t{original_vsn=Vsn}.
-
- -spec applications(t()) -> list().
- applications(#app_info_t{applications=Applications}) ->
- Applications.
-
- -spec applications(t(), list()) -> t().
- applications(AppInfo=#app_info_t{}, Applications) ->
- AppInfo#app_info_t{applications=Applications}.
-
- -spec profiles(t()) -> list().
- profiles(#app_info_t{profiles=Profiles}) ->
- Profiles.
-
- -spec profiles(t(), list()) -> t().
- profiles(AppInfo=#app_info_t{}, Profiles) ->
- AppInfo#app_info_t{profiles=Profiles}.
-
- -spec deps(t()) -> list().
- deps(#app_info_t{deps=Deps}) ->
- Deps.
-
- -spec deps(t(), list()) -> t().
- deps(AppInfo=#app_info_t{}, Deps) ->
- AppInfo#app_info_t{deps=Deps}.
-
- dep_level(AppInfo=#app_info_t{}, Level) ->
- AppInfo#app_info_t{dep_level=Level}.
-
- dep_level(#app_info_t{dep_level=Level}) ->
- Level.
-
- -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").
-
- -spec source(t(), string() | tuple()) -> t().
- source(AppInfo=#app_info_t{}, Source) ->
- AppInfo#app_info_t{source=Source}.
-
- -spec source(t()) -> string() | tuple().
- source(#app_info_t{source=Source}) ->
- Source.
-
- -spec state(t(), rebar_state:t() | undefined) -> t().
- state(AppInfo=#app_info_t{}, State) ->
- AppInfo#app_info_t{state=State}.
-
- -spec state(t()) -> rebar_state:t() | undefined.
- state(#app_info_t{state=State}) ->
- State.
-
- -spec valid(t()) -> boolean().
- valid(AppInfo=#app_info_t{valid=undefined}) ->
- case rebar_app_discover:validate_application_info(AppInfo) of
- true ->
- true;
- _ ->
- false
- end;
- valid(#app_info_t{valid=Valid}) ->
- Valid.
-
- -spec valid(t(), boolean()) -> t().
- valid(AppInfo=#app_info_t{}, Valid) ->
- AppInfo#app_info_t{valid=Valid}.
|