mirror of
https://github.com/correl/rebar.git
synced 2024-11-14 03:00:12 +00:00
Fix error when processing non-existent include_lib file
Since process_attr/3 searches source code for attributes, it can happen that it finds an attribute which is eventually not needed by the compilation, e.g. hidden by ifdef macro - see enclosed test. Such attribute can reference a file which is not in the path or which even doesn't exist at all, and current code doesn't expect such a situation. We fix things by simply ignoring such files.
This commit is contained in:
parent
ee5a75cb33
commit
07a4a14af6
2 changed files with 9 additions and 5 deletions
|
@ -5,6 +5,9 @@
|
|||
-export([parse_transform/2]).
|
||||
|
||||
-include("lambda.hrl").
|
||||
-ifdef(NOT_DEFINED).
|
||||
-include_lib("include/non/existent.hrl").
|
||||
-endif.
|
||||
|
||||
parse_transform(Forms, _Options) ->
|
||||
Forms.
|
||||
|
|
|
@ -594,8 +594,7 @@ process_attr(include, Form, Includes) ->
|
|||
process_attr(include_lib, Form, Includes) ->
|
||||
[FileNode] = erl_syntax:attribute_arguments(Form),
|
||||
RawFile = erl_syntax:string_value(FileNode),
|
||||
File = maybe_expand_include_lib_path(RawFile),
|
||||
[File|Includes];
|
||||
maybe_expand_include_lib_path(RawFile) ++ Includes;
|
||||
process_attr(behaviour, Form, Includes) ->
|
||||
[FileNode] = erl_syntax:attribute_arguments(Form),
|
||||
File = module_to_erl(erl_syntax:atom_value(FileNode)),
|
||||
|
@ -631,7 +630,7 @@ module_to_erl(Mod) ->
|
|||
maybe_expand_include_lib_path(File) ->
|
||||
case filelib:is_regular(File) of
|
||||
true ->
|
||||
File;
|
||||
[File];
|
||||
false ->
|
||||
expand_include_lib_path(File)
|
||||
end.
|
||||
|
@ -646,8 +645,10 @@ expand_include_lib_path(File) ->
|
|||
Split = filename:split(filename:dirname(File)),
|
||||
Lib = hd(Split),
|
||||
SubDir = filename:join(tl(Split)),
|
||||
Dir = code:lib_dir(list_to_atom(Lib), list_to_atom(SubDir)),
|
||||
filename:join(Dir, File1).
|
||||
case code:lib_dir(list_to_atom(Lib), list_to_atom(SubDir)) of
|
||||
{error, bad_name} -> [];
|
||||
Dir -> [filename:join(Dir, File1)]
|
||||
end.
|
||||
|
||||
%%
|
||||
%% Ensure all files in a list are present and abort if one is missing
|
||||
|
|
Loading…
Reference in a new issue