mad_app.erl 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. -module(mad_app).
  2. -copyright('Sina Samavati').
  3. -compile([export_all, nowarn_export_all]).
  4. app_src_to_app(Filename) -> filename:basename(Filename, ".app.src") ++ ".app".
  5. to_list(X) when is_atom(X) -> atom_to_list(X);
  6. to_list(X) -> X.
  7. validate_property({modules, _}, Modules) -> {modules, Modules};
  8. validate_property({vsn, Value}, _) -> {vsn, to_list(Value)};
  9. validate_property(Else, _) -> Else.
  10. compile(File,_Inc,Bin,_Opt,_Deps) ->
  11. AppFile = filename:join(Bin, app_src_to_app(File)),
  12. Compiled = mad_compile:is_compiled(AppFile, File),
  13. if Compiled =:= false ->
  14. mad:info("Writing ~s~n", [AppFile -- mad_utils:cwd()]),
  15. BeamFiles = filelib:wildcard("*.beam", Bin),
  16. Modules = [list_to_atom(filename:basename(X, ".beam")) || X <- BeamFiles],
  17. [Struct|_] = mad_utils:consult(File),
  18. {application, AppName, Props} = Struct,
  19. Props0 = add_modules_property(Props),
  20. Props1 = generate_deps(AppName,Props0),
  21. Props2 = [validate_property(X, Modules) || X <- Props1],
  22. Struct1 = {application, AppName, Props2},
  23. file:write_file(AppFile, io_lib:format("~p.~n", [Struct1])),
  24. false;
  25. true -> false end.
  26. add_modules_property(Properties) ->
  27. case lists:keyfind(modules, 1, Properties) of
  28. {modules, _} -> Properties;
  29. _ -> Properties ++ [{modules, []}] end.
  30. apps(AppName) -> {ok,Apps} = mad_resolve:orderapps(), {applications,Apps -- [AppName]}.
  31. generate_deps(AppName,Properties) ->
  32. case lists:keyfind(applications, 1, Properties) of
  33. false -> Properties ++ [apps(AppName)];
  34. _Exists -> Properties end.