summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2016-08-10 13:10:55 -0400
committerFred Hebert <mononcqc@ferd.ca>2016-08-10 13:10:55 -0400
commitea7942d9477bf2b0e3fffb905c04d330536f6c53 (patch)
tree46c2cec600909164edb100f5361ab61ad5f1b009
parent8205d2424529975bbcf0b72c45b488a6b22702fb (diff)
Fix filtering of system libraries in escriptize
https://github.com/erlang/rebar3/pull/1249 introduced a mechanism by which escript dependencies of applications only would be included; this required adding a filter to skip system libraries in the OTP root because that tends to break escripts in very nasty ways. However, the problem came that some libraries are just not in the escript path but may still be included; for these libraries the path prefix check failed as they return `{error, bad_name}` from `code:lib_dir(Dep)` rather than just the path they're in -- specifically, this happens with top level apps. The issue was reported in https://github.com/erlang/rebar3/issues/1294 and the current patch fixes it by accepting a `bad_name` dep as valid, since it is obviously not in the root path.
-rw-r--r--src/rebar_prv_escriptize.erl4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/rebar_prv_escriptize.erl b/src/rebar_prv_escriptize.erl
index d8704f6..e92c80d 100644
--- a/src/rebar_prv_escriptize.erl
+++ b/src/rebar_prv_escriptize.erl
@@ -232,7 +232,9 @@ find_deps_of_deps([Name|Names], Apps, Acc) ->
DepNames = proplists:get_value(applications, rebar_app_info:app_details(App), []),
BinDepNames = [ec_cnv:to_binary(Dep) || Dep <- DepNames,
%% ignore system libs; shouldn't include them.
- not lists:prefix(code:root_dir(), code:lib_dir(Dep))]
+ DepDir <- [code:lib_dir(Dep)],
+ DepDir =:= {error, bad_name} orelse % those are all local
+ not lists:prefix(code:root_dir(), DepDir)]
-- ([Name|Names]++Acc), % avoid already seen deps
?DEBUG("new deps of ~p found to be ~p", [Name, BinDepNames]),
find_deps_of_deps(BinDepNames ++ Names, Apps, BinDepNames ++ Acc).