Просмотр исходного кода

ensure_started option for root app

Maxim Sokhatsky 10 лет назад
Родитель
Сommit
f5d8b2ca9b
5 измененных файлов с 41 добавлено и 6 удалено
  1. BIN
      mad
  2. 11 2
      src/mad.erl
  3. 1 0
      src/mad_compile.erl
  4. 7 4
      src/mad_repl.erl
  5. 22 0
      src/mad_utils.erl

+ 11 - 2
src/mad.erl

@@ -6,6 +6,9 @@
 main([]) -> help();
 main(Params) ->
 
+    FP = mad_utils:fold_params(Params),
+    io:format("Params: ~p~n",[FP]),
+
     Cwd = mad_utils:cwd(),
     ConfigFile = "rebar.config",
     ConfigFileAbs = filename:join(Cwd, ConfigFile),
@@ -21,11 +24,12 @@ main(Params) ->
     LibDirs = mad_utils:lib_dirs(Cwd, Conf),
     code:add_paths(LibDirs),
 
-    Fun = fun(F) -> Name = list_to_atom(F), ?MODULE:Name(Cwd, ConfigFile, Conf1,Params) end,
-    lists:foreach(Fun, Params).
+    Fun = fun({Name,Params}) -> ?MODULE:Name(Cwd, ConfigFile, Conf1, Params) end,
+    lists:foreach(Fun, FP).
 
 %% fetch dependencies
 deps(Cwd, ConfigFile, Conf, Params) ->
+    io:format("Deps Params: ~p~n",[Params]),
     case mad_utils:get_value(deps, Conf, []) of
         [] -> ok;
         Deps ->
@@ -40,17 +44,21 @@ deps(Cwd, ConfigFile, Conf, Params) ->
 
 %% compile dependencies and the app
 compile(Cwd, ConfigFile, Conf, Params) ->
+    io:format("Compile Params: ~p~n",[Params]),
     mad_compile:'compile-deps'(Cwd, ConfigFile, Conf),
     mad_compile:'compile-apps'(Cwd, ConfigFile, Conf).
 
 %% reltool apps resolving
 plan(Cwd,ConfigFileName,Config,Params) ->
+    io:format("Plan Params: ~p~n",[Params]),
     mad_plan:main(mad_plan:applist()).
 
 repl(Cwd,ConfigFileName,Config,Params) ->
+    io:format("Repl Params: ~p~n",[Params]),
     mad_repl:main(Params).
 
 tool(Cwd,ConfigFileName,Config,Params) ->
+    io:format("Tool Params: ~p~n",[Params]),
     mad_tool:main(filename:basename(mad_utils:cwd())).
 
 help(Reason, Data) -> help(io_lib:format("~s ~p", [Reason, Data])).
@@ -59,3 +67,4 @@ help() ->
     io:format("SRC VXZ MAD Build Tool version 1.0~n"),
     io:format("mad deps compile plan start stop repl attach release tool ~n"),
     halt().
+

+ 1 - 0
src/mad_compile.erl

@@ -55,6 +55,7 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
 compile_fun(Inc,Bin,Opt) -> fun(File) -> (module(filetype(File))):compile(File,Inc,Bin,Opt) end.
 
 module("erl") -> mad_erl;
+module("erl.src") -> mad_utils;
 module("yrl") -> mad_yecc;
 module("app.src") -> mad_app.
 

+ 7 - 4
src/mad_repl.erl

@@ -1,7 +1,7 @@
 -module(mad_repl).
 -compile(export_all).
 
-main(Params) ->
+load_config() ->
    Config = filelib:wildcard("rels/*/files/sys.config"),
    case Config of
       [] -> skip;
@@ -10,6 +10,9 @@ main(Params) ->
             [  [ begin
               io:format("~p : ~p = ~p~n",[App,K,V]),
               application:set_env(App,K,V) end || {K,V} <- Cfg ]  || {App,Cfg} <- Apps]
-             end,
-   [application:start(A)||A<-mad_plan:applist()], shell:start(),
-   timer:sleep(infinity).
+             end.
+
+load_apps([]) -> [application:start(A)||A<-mad_plan:applist()];
+load_apps(Params) -> [application:ensure_all_started(list_to_atom(A))||A<-Params].
+
+main(Params) -> load_config(), load_apps(Params), user_drv:start(), timer:sleep(infinity).

+ 22 - 0
src/mad_utils.erl

@@ -66,3 +66,25 @@ to_atom(X) when is_list(X) -> list_to_atom(X);
 to_atom(X) when is_binary(X) -> to_atom(binary_to_list(X));
 to_atom(X) -> X.
 
+atomize("com"++_) -> compile;
+atomize("rep"++_) -> repl;
+atomize("tol"++_) -> tool;
+atomize("dep"++_) -> deps;
+atomize("pla"++_) -> plan;
+atomize(Else) -> Else.
+
+atomize_params_commands(Params) -> atomize_params_commands(Params,[]).
+atomize_params_commands([],New) -> New;
+atomize_params_commands([H|T], New) -> atomize_params_commands(T,[atomize(H)|New]).
+
+fold_params(Params) -> 
+   Atomized = atomize_params_commands(Params),
+   {[],Fold} = lists:foldl(fun(X,{Current,Result}) -> 
+      case atomize(X) of
+           X when is_atom(X) -> {[],[{X,Current}|Result]};
+           E -> {[E|Current],Result} end
+      end, {[],[]}, Atomized),
+   Fold.
+
+compile(File,Inc,Bin,Opt) -> ok.
+