mad_utils.erl 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. -module(mad_utils).
  2. -copyright('Sina Samavati').
  3. -compile(export_all).
  4. atomize("app"++_) -> app;
  5. atomize("dep") -> deps;
  6. atomize("deps") -> deps;
  7. atomize("cle"++_) -> clean;
  8. atomize("com"++_) -> compile;
  9. atomize("up") -> up;
  10. atomize("rel"++_) -> release;
  11. atomize("bun"++_) -> release;
  12. atomize("deploy") -> deploy;
  13. atomize("sta"++_) -> start;
  14. atomize("sto"++_) -> stop;
  15. atomize("att"++_) -> attach;
  16. atomize("sh") -> sh;
  17. atomize("static") -> static;
  18. atomize("pla"++_) -> release;
  19. atomize(Else) -> Else.
  20. cwd() -> {ok, Cwd} = file:get_cwd(), Cwd.
  21. home() -> {ok, [[H|_]]} = init:get_argument(home), H.
  22. consult(File) ->
  23. AbsFile = filename:absname(File),
  24. case file:consult(AbsFile) of
  25. {ok, V} ->
  26. V;
  27. _ ->
  28. []
  29. end.
  30. src(Dir) -> filename:join(Dir, "src").
  31. include(Dir) -> filename:join(Dir, "include").
  32. ebin(Dir) -> filename:join(Dir, "ebin").
  33. deps(File) -> get_value(deps, consult(File), []).
  34. get_value(Key, Opts, Default) ->
  35. case lists:keyfind(Key, 1, Opts) of
  36. {Key, Value} ->
  37. Value;
  38. _ -> Default end.
  39. script(ConfigFile, Conf, _Name) ->
  40. File = ConfigFile ++ ".script",
  41. case file:script(File, [{'CONFIG', Conf}, {'SCRIPT', File}]) of
  42. {ok, {error,_}} -> Conf;
  43. {ok, Out} -> Out;
  44. {error, _} -> Conf
  45. end.
  46. sub_dirs(Cwd, ConfigFile, Conf) ->
  47. sub_dirs(Cwd, ConfigFile, get_value(sub_dirs, Conf, []), []).
  48. sub_dirs(_, _, [], Acc) -> Acc;
  49. sub_dirs(Cwd, ConfigFile, [Dir|T], Acc) ->
  50. SubDir = filename:join(Cwd, Dir),
  51. ConfigFile1 = filename:join(SubDir, ConfigFile),
  52. Conf = consult(ConfigFile1),
  53. Conf1 = mad_script:script(ConfigFile1, Conf, Dir),
  54. Acc1 = sub_dirs(SubDir, ConfigFile, get_value(sub_dirs, Conf1, []),
  55. Acc ++ [SubDir]),
  56. sub_dirs(Cwd, ConfigFile, T, Acc1).
  57. lib_dirs(Cwd, Conf) -> lib_dirs(Cwd, get_value(lib_dirs, Conf, []), []).
  58. raw_deps(Deps) -> raw_deps(Deps,[]).
  59. raw_deps([],Res) -> Res;
  60. raw_deps([D|Deps],Res) when is_tuple(D) -> raw_deps([element(1,D)|Deps],Res);
  61. raw_deps([D|Deps],Res) -> raw_deps(Deps,[D|Res]).
  62. lib_dirs(_, [], Acc) -> Acc;
  63. lib_dirs(Cwd, [H|T], Acc) when is_tuple(H) -> lib_dirs(Cwd, [element(1,H)|T], Acc);
  64. lib_dirs(Cwd, [H|T], Acc) ->
  65. Dirs = filelib:wildcard(filename:join([Cwd, H, "*", "include"])),
  66. lib_dirs(Cwd, T, Acc ++ Dirs).
  67. last_modified(File) ->
  68. case filelib:last_modified(File) of
  69. 0 -> 0;
  70. Else -> calendar:datetime_to_gregorian_seconds(Else) end.
  71. to_atom(X) when is_atom(X) -> X;
  72. to_atom(X) when is_list(X) -> list_to_atom(X);
  73. to_atom(X) when is_binary(X) -> to_atom(binary_to_list(X));
  74. to_atom(X) -> X.
  75. atomize_params_commands(Params) -> atomize_params_commands(Params,[]).
  76. atomize_params_commands([],New) -> New;
  77. atomize_params_commands([H|T], New) -> atomize_params_commands(T,[atomize(H)|New]).
  78. fold_params(Params) ->
  79. Atomized = atomize_params_commands(Params),
  80. lists:foldl(fun(X,{Current,Result}) ->
  81. case atomize(X) of
  82. X when is_atom(X) -> {[],[{X,Current}|Result]};
  83. E -> {[E|Current],Result} end
  84. end, {[],[]}, Atomized).
  85. verbose(Config,Message) ->
  86. case mad_utils:get_value(verbose, Config, 0) of
  87. 0 -> skip;
  88. _ -> mad:info("~s",[binary_to_list(Message)]) end.
  89. compile(_,_,_,_,_) -> false.
  90. configs() ->
  91. Cwd = mad_utils:cwd(),
  92. ConfigFile = "rebar.config",
  93. ConfigFileAbs = filename:join(Cwd, ConfigFile),
  94. Conf = mad_utils:consult(ConfigFileAbs),
  95. Conf1 = mad_script:script(ConfigFileAbs, Conf, ""),
  96. {Cwd,ConfigFile,Conf1}.