mad.erl 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -module(mad).
  2. -export([main/1]).
  3. -export(['clone-deps'/1]).
  4. -export([compile/1]).
  5. -export(['compile-app'/1]).
  6. -export(['compile-deps'/1]).
  7. main([]) ->
  8. io:format("no args~n");
  9. main(Args) ->
  10. Cwd = mad_utils:cwd(),
  11. code:add_path(mad_utils:ebin(Cwd)),
  12. Conf = mad_utils:rebar_conf(Cwd),
  13. Conf1 = mad_utils:script(Cwd, Conf),
  14. Fun = fun(F) -> F1 = list_to_atom(F), ?MODULE:F1(Conf1) end,
  15. lists:foreach(Fun, Args).
  16. %% clone dependencies
  17. 'clone-deps'(Conf) ->
  18. case get_value(deps, Conf, []) of
  19. [] ->
  20. ok;
  21. Deps ->
  22. mad_utils:exec("mkdir", ["-p", mad_deps:container()]),
  23. mad_utils:exec("mkdir", ["-p", "deps"]),
  24. mad_deps:clone(Deps)
  25. end.
  26. %% compile dependencies and the app
  27. compile(Conf) ->
  28. Cwd = mad_utils:cwd(),
  29. %% add lib_dirs to path
  30. LibDirs = mad_utils:lib_dirs(Cwd, Conf),
  31. code:add_paths(LibDirs),
  32. %% compile dependencies
  33. 'compile-deps'(Conf),
  34. %% check sub_dirs if they have something to be compiled
  35. SubDirs = mad_utils:sub_dirs(Cwd, Conf),
  36. lists:foreach(fun mad_compile:app/1, SubDirs),
  37. %% compile the app
  38. 'compile-app'(Conf).
  39. %% compile a project according to the conventions
  40. 'compile-app'(Conf) ->
  41. Cwd = mad_utils:cwd(),
  42. %% add lib_dirs to path
  43. LibDirs = mad_utils:lib_dirs(Cwd, Conf),
  44. code:add_paths(LibDirs),
  45. Dirs = [Cwd|mad_utils:sub_dirs(Cwd, Conf)],
  46. lists:foreach(fun mad_compile:app/1, Dirs).
  47. 'compile-deps'(Conf) ->
  48. mad_compile:deps(get_value(deps, Conf, [])).
  49. get_value(Key, Opts, Default) ->
  50. case lists:keyfind(Key, 1, Opts) of
  51. {Key, Value} ->
  52. Value;
  53. _ -> Default
  54. end.