mad.erl 1.7 KB

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