소스 검색

Merge pull request #1232 from talentdeficit/REBAR-1184

REBAR-1184 always recompile if `ERL_COMPILER_OPTIONS` env var is set
pull/1233/head
Fred Hebert 9 년 전
committed by GitHub
부모
커밋
095af3bfca
2개의 변경된 파일55개의 추가작업 그리고 2개의 파일을 삭제
  1. +7
    -0
      src/rebar_erlc_compiler.erl
  2. +48
    -2
      test/rebar_compile_SUITE.erl

+ 7
- 0
src/rebar_erlc_compiler.erl 파일 보기

@ -307,6 +307,7 @@ needed_files(G, ErlOpts, Dir, OutDir, SourceFiles) ->
,{i, Dir}] ++ ErlOpts,
digraph:vertex(G, Source) > {Source, filelib:last_modified(Target)}
orelse opts_changed(AllOpts, TargetBase)
orelse erl_compiler_opts_set()
end, SourceFiles).
maybe_rm_beam_and_edge(G, OutDir, Source) ->
@ -339,6 +340,12 @@ compile_info(Target) ->
{error, Reason}
end.
erl_compiler_opts_set() ->
case os:getenv("ERL_COMPILER_OPTIONS") of
false -> false;
_ -> true
end.
erlcinfo_file(Dir) ->
filename:join(rebar_dir:local_cache_dir(Dir), ?ERLCINFO_FILE).

+ 48
- 2
test/rebar_compile_SUITE.erl 파일 보기

@ -40,7 +40,8 @@
profile_override_deps/1,
deps_build_in_prod/1,
include_file_relative_to_working_directory/1,
include_file_in_src/1]).
include_file_in_src/1,
always_recompile_when_erl_compiler_options_set/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@ -62,7 +63,11 @@ all() ->
parse_transform_test, erl_first_files_test, mib_test,
umbrella_mib_first_test, only_default_transitive_deps,
clean_all, override_deps, profile_override_deps, deps_build_in_prod,
include_file_relative_to_working_directory, include_file_in_src].
include_file_relative_to_working_directory, include_file_in_src] ++
case erlang:function_exported(os, unsetenv, 1) of
true -> [always_recompile_when_erl_compiler_options_set];
false -> []
end.
groups() ->
[{basic_app, [], [build_basic_app, paths_basic_app, clean_basic_app]},
@ -1265,3 +1270,44 @@ include_file_in_src(Config) ->
rebar_test_utils:run_and_check(Config, RebarConfig,
["compile"],
{ok, [{app, Name}]}).
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"),
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),
true = os:putenv("ERL_COMPILER_OPTIONS", "[{d, some_macro}]"),
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.

불러오는 중...
취소
저장