Browse Source

fix dependency search

Namdak Tonpa 10 years ago
parent
commit
ec0c05c2f6

BIN
mad


+ 1 - 1
src/compile/mad_app.erl

@@ -11,7 +11,7 @@ validate_property({modules, _}, Modules) -> {modules, Modules};
 validate_property({vsn, Value}, _) -> {vsn, to_list(Value)};
 validate_property(Else, _) -> Else.
 
-compile(File,_Inc,Bin,_Opt) ->
+compile(File,_Inc,Bin,_Opt,Deps) ->
     AppFile = filename:join(Bin, app_src_to_app(File)),
     Compiled = mad_compile:is_compiled(AppFile, File),
     if  Compiled =:= false ->

+ 5 - 5
src/compile/mad_erl.erl

@@ -1,17 +1,17 @@
 -module(mad_erl).
 -copyright('Sina Samavati').
 -compile(export_all).
--define(COMPILE_OPTS(Inc, Ebin, Opts), [report, {i, Inc}, {outdir, Ebin}] ++ Opts).
+-define(COMPILE_OPTS(Inc, Ebin, Opts, Deps), [report, {i, [Inc]}, {outdir, Ebin}] ++ Opts++Deps).
 
 erl_to_beam(Bin, F) -> filename:join(Bin, filename:basename(F, ".erl") ++ ".beam").
 
-compile(File,Inc,Bin,Opt) ->
+compile(File,Inc,Bin,Opt,Deps) ->
     BeamFile = erl_to_beam(Bin, File),
     Compiled = mad_compile:is_compiled(BeamFile, File),
     if  Compiled =:= false ->
-        Opts1 = ?COMPILE_OPTS(Inc, Bin, Opt),
-%        io:format("Compiling ~s Opts ~p~n\r", [File,Opts1]),
-        io:format("Compiling ~s~n\r", [File]),
+        Opts1 = ?COMPILE_OPTS(Inc, Bin, Opt, Deps),
+%        io:format("Compiling ~s~n Opts ~p~n Deps~p~n", [File,Opts1,Deps]),
+        io:format("Compiling ~s~n", [File]),
         compile:file(File, Opts1),
         ok;
     true -> ok end.

+ 1 - 1
src/compile/mad_leex.erl

@@ -4,7 +4,7 @@
 
 xrl_to_erl(F) -> filename:join(filename:dirname(F),filename:basename(F, ".xrl")) ++ ".erl".
 
-compile(File,Inc,Bin,Opt) ->
+compile(File,Inc,Bin,Opt,Deps) ->
     ErlFile = xrl_to_erl(File),
     Compiled = mad_compile:is_compiled(ErlFile,File),
     if Compiled == false ->

+ 1 - 1
src/compile/mad_none.erl

@@ -1,4 +1,4 @@
 -module(mad_none).
 -compile(export_all).
 
-compile(_,_,_,_) -> ok.
+compile(_,_,_,_,_) -> ok.

+ 1 - 1
src/compile/mad_yecc.erl

@@ -4,7 +4,7 @@
 
 yrl_to_erl(F) -> filename:join(filename:dirname(F),filename:basename(F, ".yrl")) ++ ".erl".
 
-compile(File,Inc,Bin,Opt) ->
+compile(File,Inc,Bin,Opt,Deps) ->
     ErlFile = yrl_to_erl(File),
     Compiled = mad_compile:is_compiled(ErlFile,File),
     if Compiled == false ->

+ 9 - 3
src/mad_compile.erl

@@ -21,7 +21,8 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
     DepConfigFile = filename:join(DepPath, ConfigFile),
     Conf = mad_utils:consult(DepConfigFile),
     Conf1 = mad_script:script(DepConfigFile, Conf, Name),
-    deps(Cwd, Conf, ConfigFile, mad_utils:get_value(deps, Conf1, [])),
+    Deps = mad_utils:get_value(deps, Conf1, []),
+    deps(Cwd, Conf, ConfigFile, Deps),
 
     SrcDir = filename:join([mad_utils:src(DepPath)]),
 %    io:format("DepPath ==> ~p~n\r",[DepPath]),
@@ -36,6 +37,11 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
         Files ->
             IncDir = mad_utils:include(DepPath),
             EbinDir = mad_utils:ebin(DepPath),
+            LibDirs = mad_utils:get_value(lib_dirs, Conf, []),
+            Includes = lists:flatten([
+                [{i,filename:join([DepPath,L,D,include])} || D<-mad_utils:raw_deps(Deps) ] % for -include
+             ++ [{i,filename:join([DepPath,L])}] || L <- LibDirs ]), % for -include_lib
+%            io:format("DepPath ~p~n Includes: ~p~nLibDirs: ~p~n",[DepPath,Includes,LibDirs]),
 
             %% create EbinDir and add it to code path
             file:make_dir(EbinDir),
@@ -44,7 +50,7 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
             %erlc(DepPath), % comment this to build with files/2
 
             Opts = mad_utils:get_value(erl_opts, Conf1, []),
-            lists:foreach(compile_fun(IncDir, EbinDir, Opts), Files),
+            lists:foreach(compile_fun(IncDir, EbinDir, Opts,Includes), Files),
 
             mad_dtl:compile(DepPath,Conf1),
             mad_port:compile(DepPath,Conf1),
@@ -53,7 +59,7 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
             ok
     end.
 
-compile_fun(Inc,Bin,Opt) -> fun(File) -> (module(filetype(File))):compile(File,Inc,Bin,Opt) end.
+compile_fun(Inc,Bin,Opt,Deps) -> fun(File) -> (module(filetype(File))):compile(File,Inc,Bin,Opt,Deps) end.
 
 module("erl") -> mad_erl;
 module("erl.src") -> mad_utils;

+ 8 - 2
src/mad_utils.erl

@@ -49,9 +49,15 @@ sub_dirs(Cwd, ConfigFile, [Dir|T], Acc) ->
 
 lib_dirs(Cwd, Conf) -> lib_dirs(Cwd, get_value(lib_dirs, Conf, []), []).
 
+raw_deps(Deps) -> raw_deps(Deps,[]).
+raw_deps([],Res) -> Res;
+raw_deps([D|Deps],Res) when is_tuple(D) -> raw_deps([element(1,D)|Deps],Res);
+raw_deps([D|Deps],Res) -> raw_deps(Deps,[D|Res]).
+
 lib_dirs(_, [], Acc) -> Acc;
+lib_dirs(Cwd, [H|T], Acc) when is_tuple(H) -> lib_dirs(Cwd, [element(1,H)|T], Acc);
 lib_dirs(Cwd, [H|T], Acc) ->
-    Dirs = filelib:wildcard(filename:join([Cwd, H, "*", "ebin"])),
+    Dirs = filelib:wildcard(filename:join([Cwd, H, "*", "include"])),
     lib_dirs(Cwd, T, Acc ++ Dirs).
 
 last_modified(File) ->
@@ -93,5 +99,5 @@ fold_params(Params) ->
            E -> {[E|Current],Result} end
       end, {[],[]}, Atomized).
 
-compile(_,_,_,_) -> ok.
+compile(_,_,_,_,_) -> ok.