1234567891011121314151617181920212223242526272829303132333435363738394041 |
- -module(mad_app).
- -copyright('Sina Samavati').
- -compile([export_all, nowarn_export_all]).
- app_src_to_app(Filename) -> filename:basename(Filename, ".app.src") ++ ".app".
- to_list(X) when is_atom(X) -> atom_to_list(X);
- to_list(X) -> X.
- validate_property({modules, _}, Modules) -> {modules, Modules};
- validate_property({vsn, Value}, _) -> {vsn, to_list(Value)};
- validate_property(Else, _) -> Else.
- compile(File,_Inc,Bin,_Opt,_Deps) ->
- AppFile = filename:join(Bin, app_src_to_app(File)),
- Compiled = mad_compile:is_compiled(AppFile, File),
- if Compiled =:= false ->
- mad:info("Writing ~s~n", [AppFile -- mad_utils:cwd()]),
- BeamFiles = filelib:wildcard("*.beam", Bin),
- Modules = [list_to_atom(filename:basename(X, ".beam")) || X <- BeamFiles],
- [Struct|_] = mad_utils:consult(File),
- {application, AppName, Props} = Struct,
- Props0 = add_modules_property(Props),
- Props1 = generate_deps(AppName,Props0),
- Props2 = [validate_property(X, Modules) || X <- Props1],
- Struct1 = {application, AppName, Props2},
- file:write_file(AppFile, io_lib:format("~p.~n", [Struct1])),
- false;
- true -> false end.
- add_modules_property(Properties) ->
- case lists:keyfind(modules, 1, Properties) of
- {modules, _} -> Properties;
- _ -> Properties ++ [{modules, []}] end.
- apps(AppName) -> {ok,Apps} = mad_resolve:orderapps(), {applications,Apps -- [AppName]}.
- generate_deps(AppName,Properties) ->
- case lists:keyfind(applications, 1, Properties) of
- false -> Properties ++ [apps(AppName)];
- _Exists -> Properties end.
|