[PATCH] allow user specified compiler options in cover.erl
Tobias Schlager
tobias.schlager@REDACTED
Thu Sep 16 09:56:13 CEST 2010
I would like to propose a small patch of the cover.erl module.
Motivation:
In order to be able to test non-exported functions from another (test)
module it is necessary to compile the specific module (at least during
the test phase) with the export_all compiler option. This allows
complete separation of testing and productive code. At the moment it is
not possible to combine this with a test code coverage using the cover
module. The problem is that when cover compiling a module using
cover:compile_* the code is reloaded into the emulator
omitting/filtering the passed user options. In my example above the
export_all option would be removed and the non-exported functions cannot
be called any more.
Change:
The below patch would
* extend the filtering of compiler options in compile_module/2 to allow
the user to pass the export_all option
* pass the (filtered) user specified compiler options to compile:forms
in order to have the options enabled when the cover compiled code is
loaded into the emulator
--- cover.erl.orig 2010-06-11 17:31:53.000000000 +0200
+++ cover.erl.new 2010-09-15 16:46:24.000000000 +0200
@@ -229,6 +229,7 @@
{i, Dir} when is_list(Dir) -> true;
{d, _Macro} -> true;
{d, _Macro, _Value} -> true;
+ export_all -> true;
_ -> false
end
end,
@@ -569,7 +570,7 @@
case get_beam_file(Module,BeamFile0,Compiled0) of
{ok,BeamFile} ->
{Reply,Compiled} =
- case do_compile_beam(Module,BeamFile) of
+ case do_compile_beam(Module,BeamFile,[]) of
{ok, Module} ->
remote_load_compiled(State#main_state.nodes,
[{Module,BeamFile}]),
@@ -1227,13 +1228,13 @@
Options = [debug_info,binary,report_errors,report_warnings] ++
UserOptions,
case compile:file(File, Options) of
{ok, Module, Binary} ->
- do_compile_beam(Module,Binary);
+ do_compile_beam(Module,Binary,UserOptions);
error ->
error
end.
%% Beam is a binary or a .beam file name
-do_compile_beam(Module,Beam) ->
+do_compile_beam(Module,Beam,UserOptions) ->
%% Clear database
do_clear(Module),
@@ -1253,7 +1254,7 @@
%% Compile and load the result
%% It's necessary to check the result of loading since it may
%% fail, for example if Module resides in a sticky directory
- {ok, Module, Binary} = compile:forms(Forms, []),
+ {ok, Module, Binary} = compile:forms(Forms, UserOptions),
case code:load_binary(Module, ?TAG, Binary) of
{module, Module} ->
Regards
Tobias Schlager
More information about the erlang-patches
mailing list