@ -44,6 +44,8 @@
include_file_in_src / 1 ,
include_file_relative_to_working_directory_test / 1 ,
include_file_in_src_test / 1 ,
dont_recompile_when_erl_compiler_options_env_does_not_change / 1 ,
recompile_when_erl_compiler_options_env_changes / 1 ,
always_recompile_when_erl_compiler_options_set / 1 ,
recompile_when_parse_transform_inline_changes / 1 ,
recompile_when_parse_transform_as_opt_changes / 1 ,
@ -74,10 +76,20 @@ all() ->
include_file_relative_to_working_directory_test , include_file_in_src_test ,
recompile_when_parse_transform_as_opt_changes ,
recompile_when_parse_transform_inline_changes ,
recursive , no_recursive ] ++
case erlang : function_exported ( os , unsetenv , 1 ) of
true - > [ always_recompile_when_erl_compiler_options_set ] ;
false - > [ ]
% % recompile behaviour when ` ERL_COMPILER_OPTIONS ` differs prior to 19 . x
recursive , no_recursive ] ++ recompile_when_env_changes_test ( ) .
recompile_when_env_changes_test ( ) - >
_ = code : ensure_loaded ( os ) ,
UnSetEnv = erlang : function_exported ( os , unsetenv , 1 ) ,
_ = code : ensure_loaded ( compile ) ,
EnvOpts = erlang : function_exported ( compile , env_compiler_options , 0 ) ,
case { UnSetEnv , EnvOpts } of
{ true , true } - >
[ dont_recompile_when_erl_compiler_options_env_does_not_change ,
recompile_when_erl_compiler_options_env_changes ] ;
{ true , false } - > [ always_recompile_when_erl_compiler_options_set ] ;
{ false , _ } - > [ ]
end .
groups ( ) - >
@ -1385,7 +1397,45 @@ include_file_in_src_test(Config) ->
[ " as " , " test " , " compile " ] ,
{ ok , [ { app , Name } ] } ) .
always_recompile_when_erl_compiler_options_set ( Config ) - >
dont_recompile_when_erl_compiler_options_env_does_not_change ( Config ) - >
% % save existing env to restore after test
ExistingEnv = os : getenv ( " ERL_COMPILER_OPTIONS " ) ,
AppDir = ? config ( apps , Config ) ,
Name = rebar_test_utils : create_random_name ( " erl_compiler_options_ " ) ,
Vsn = rebar_test_utils : create_random_vsn ( ) ,
rebar_test_utils : create_app ( AppDir , Name , Vsn , [ kernel , stdlib ] ) ,
true = os : unsetenv ( " ERL_COMPILER_OPTIONS " ) ,
true = os : putenv ( " ERL_COMPILER_OPTIONS " , " [{d, some_macro}] " ) ,
rebar_test_utils : run_and_check ( Config , [ ] , [ " compile " ] , { ok , [ { app , Name } ] } ) ,
EbinDir = filename : join ( [ AppDir , " _build " , " default " , " lib " , Name , " ebin " ] ) ,
{ ok , Files } = rebar_utils : list_dir ( EbinDir ) ,
ModTime = [ filelib : last_modified ( filename : join ( [ EbinDir , F ] ) )
| | F < - Files , filename : extension ( F ) == " .beam " ] ,
timer : sleep ( 1000 ) ,
rebar_test_utils : run_and_check ( Config , [ ] , [ " compile " ] , { ok , [ { app , Name } ] } ) ,
{ ok , NewFiles } = rebar_utils : list_dir ( EbinDir ) ,
NewModTime = [ filelib : last_modified ( filename : join ( [ EbinDir , F ] ) )
| | F < - NewFiles , filename : extension ( F ) == " .beam " ] ,
? assert ( ModTime == NewModTime ) ,
% % restore existing env
case ExistingEnv of
false - > ok ;
_ - > os : putenv ( " ERL_COMPILER_OPTIONS " , ExistingEnv )
end .
recompile_when_erl_compiler_options_env_changes ( Config ) - >
% % save existing env to restore after test
ExistingEnv = os : getenv ( " ERL_COMPILER_OPTIONS " ) ,
@ -1423,6 +1473,44 @@ always_recompile_when_erl_compiler_options_set(Config) ->
_ - > os : putenv ( " ERL_COMPILER_OPTIONS " , ExistingEnv )
end .
always_recompile_when_erl_compiler_options_set ( Config ) - >
% % save existing env to restore after test
ExistingEnv = os : getenv ( " ERL_COMPILER_OPTIONS " ) ,
AppDir = ? config ( apps , Config ) ,
Name = rebar_test_utils : create_random_name ( " erl_compiler_options_ " ) ,
Vsn = rebar_test_utils : create_random_vsn ( ) ,
rebar_test_utils : create_app ( AppDir , Name , Vsn , [ kernel , stdlib ] ) ,
true = os : unsetenv ( " ERL_COMPILER_OPTIONS " ) ,
true = os : putenv ( " ERL_COMPILER_OPTIONS " , " [{d, some_macro}] " ) ,
rebar_test_utils : run_and_check ( Config , [ ] , [ " compile " ] , { ok , [ { app , Name } ] } ) ,
EbinDir = filename : join ( [ AppDir , " _build " , " default " , " lib " , Name , " ebin " ] ) ,
{ ok , Files } = rebar_utils : list_dir ( EbinDir ) ,
ModTime = [ filelib : last_modified ( filename : join ( [ EbinDir , F ] ) )
| | F < - Files , filename : extension ( F ) == " .beam " ] ,
timer : sleep ( 1000 ) ,
rebar_test_utils : run_and_check ( Config , [ ] , [ " compile " ] , { ok , [ { app , Name } ] } ) ,
{ ok , NewFiles } = rebar_utils : list_dir ( EbinDir ) ,
NewModTime = [ filelib : last_modified ( filename : join ( [ EbinDir , F ] ) )
| | F < - NewFiles , filename : extension ( F ) == " .beam " ] ,
? assert ( ModTime =/= NewModTime ) ,
% % restore existing env
case ExistingEnv of
false - > ok ;
_ - > os : putenv ( " ERL_COMPILER_OPTIONS " , ExistingEnv )
end .
recompile_when_parse_transform_inline_changes ( Config ) - >
AppDir = ? config ( apps , Config ) ,