aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tools/src/make.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2017-06-30 15:20:48 +0200
committerErlang/OTP <[email protected]>2017-06-30 15:20:48 +0200
commit921c88d10ef1e92d30d71aea38af07d63a5c2611 (patch)
tree087d818a9a42f106c9b3a8a10196e0d50a8b708c /lib/tools/src/make.erl
parentc73d8d9feb9b0ebc988bd44ed340988df12c53b2 (diff)
parent3defef54fba953cb4ab5298dacc15af9c9bd25ec (diff)
downloadotp-921c88d10ef1e92d30d71aea38af07d63a5c2611.tar.gz
otp-921c88d10ef1e92d30d71aea38af07d63a5c2611.tar.bz2
otp-921c88d10ef1e92d30d71aea38af07d63a5c2611.zip
Merge branch 'siri/make/default-outdir/ERL-438/OTP-14489' into maint-20
* siri/make/default-outdir/ERL-438/OTP-14489: [ct_make] Do not use the interactive tool 'c' from ct_make Use current dir as default outdir for c:c/1,2 [make] Do not use the interactive tool 'c' from make
Diffstat (limited to 'lib/tools/src/make.erl')
-rw-r--r--lib/tools/src/make.erl48
1 files changed, 40 insertions, 8 deletions
diff --git a/lib/tools/src/make.erl b/lib/tools/src/make.erl
index ce30156db6..6554d338af 100644
--- a/lib/tools/src/make.erl
+++ b/lib/tools/src/make.erl
@@ -267,15 +267,47 @@ include_opt([]) ->
recompile(File, true, _Load, _Opts) ->
io:format("Out of date: ~ts\n",[File]);
-recompile(File, false, noload, Opts) ->
+recompile(File, false, Load, Opts) ->
io:format("Recompile: ~ts\n",[File]),
- compile:file(File, [report_errors, report_warnings, error_summary |Opts]);
-recompile(File, false, load, Opts) ->
- io:format("Recompile: ~ts\n",[File]),
- c:c(File, Opts);
-recompile(File, false, netload, Opts) ->
- io:format("Recompile: ~ts\n",[File]),
- c:nc(File, Opts).
+ case compile:file(File, [report_errors, report_warnings |Opts]) of
+ Ok when is_tuple(Ok), element(1,Ok)==ok ->
+ maybe_load(element(2,Ok), Load, Opts);
+ _Error ->
+ error
+ end.
+
+maybe_load(_Mod, noload, _Opts) ->
+ ok;
+maybe_load(Mod, Load, Opts) ->
+ %% We have compiled File with options Opts. Find out where the
+ %% output file went to, and load it.
+ case compile:output_generated(Opts) of
+ true ->
+ Dir = proplists:get_value(outdir,Opts,"."),
+ do_load(Dir, Mod, Load);
+ false ->
+ io:format("** Warning: No object file created - nothing loaded **~n"),
+ ok
+ end.
+
+do_load(Dir, Mod, load) ->
+ code:purge(Mod),
+ case code:load_abs(filename:join(Dir, Mod),Mod) of
+ {module,Mod} ->
+ {ok,Mod};
+ Other ->
+ Other
+ end;
+do_load(Dir, Mod, netload) ->
+ Obj = atom_to_list(Mod) ++ code:objfile_extension(),
+ Fname = filename:join(Dir, Obj),
+ case file:read_file(Fname) of
+ {ok,Bin} ->
+ rpc:eval_everywhere(code,load_binary,[Mod,Fname,Bin]),
+ {ok,Mod};
+ Other ->
+ Other
+ end.
exists(File) ->
case file:read_file_info(File) of