From 3fb4a7c540da227382ea0831c0c6424765900123 Mon Sep 17 00:00:00 2001 From: Tuncer Ayaz Date: Tue, 17 Jun 2014 10:49:03 +0200 Subject: Fix OS X resource fork handling (Reported-by: Richard O'Keefe) If you happen to fetch a zip archive of the git repo and try to build from that, you may, for example, ask erlc to build src/._rebar.erl. ._* are OS X resource forks and not real .erl files. This may also happen with network filesystems on OS X. To fix that, limit the files compiled by rebar to include only those which start with a letter or a digit. --- src/rebar_erlc_compiler.erl | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index f628433..6ae927d 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -47,6 +47,8 @@ info = {[], []} :: erlc_info() }). +-define(RE_PREFIX, "^[^._]"). + -ifdef(namespaced_types). %% digraph:graph() exists starting from Erlang 17. -type rebar_digraph() :: digraph:graph(). @@ -110,14 +112,14 @@ compile(Config, _AppFile) -> -spec clean(rebar_config:config(), file:filename()) -> 'ok'. clean(Config, _AppFile) -> - MibFiles = rebar_utils:find_files("mibs", "^.*\\.mib\$"), + MibFiles = rebar_utils:find_files("mibs", ?RE_PREFIX".*\\.mib\$"), MIBs = [filename:rootname(filename:basename(MIB)) || MIB <- MibFiles], rebar_file_utils:delete_each( [filename:join(["include",MIB++".hrl"]) || MIB <- MIBs]), lists:foreach(fun(F) -> ok = rebar_file_utils:rm_rf(F) end, ["ebin/*.beam", "priv/mibs/*.bin"]), - YrlFiles = rebar_utils:find_files("src", "^.*\\.[x|y]rl\$"), + YrlFiles = rebar_utils:find_files("src", ?RE_PREFIX".*\\.[x|y]rl\$"), rebar_file_utils:delete_each( [ binary_to_list(iolist_to_binary(re:replace(F, "\\.[x|y]rl$", ".erl"))) || F <- YrlFiles ]), @@ -129,7 +131,7 @@ clean(Config, _AppFile) -> %% directory structure in ebin with .beam files within. As such, we want %% to scan whatever is left in the ebin/ directory for sub-dirs which %% satisfy our criteria. - BeamFiles = rebar_utils:find_files("ebin", "^.*\\.beam\$"), + BeamFiles = rebar_utils:find_files("ebin", ?RE_PREFIX".*\\.beam\$"), rebar_file_utils:delete_each(BeamFiles), lists:foreach(fun(Dir) -> delete_dir(Dir, dirs(Dir)) end, dirs("ebin")), ok. @@ -140,7 +142,7 @@ clean(Config, _AppFile) -> test_compile(Config, Cmd, OutDir) -> %% Obtain all the test modules for inclusion in the compile stage. - TestErls = rebar_utils:find_files("test", ".*\\.erl\$"), + TestErls = rebar_utils:find_files("test", ?RE_PREFIX".*\\.erl\$"), ErlOpts = rebar_utils:erl_opts(Config), {Config1, ErlOpts1} = test_compile_config_and_opts(Config, ErlOpts, Cmd), @@ -151,7 +153,8 @@ test_compile(Config, Cmd, OutDir) -> SrcDirs = rebar_utils:src_dirs(proplists:append_values(src_dirs, ErlOpts1)), SrcErls = lists:foldl( fun(Dir, Acc) -> - Files = rebar_utils:find_files(Dir, ".*\\.erl\$"), + Files = rebar_utils:find_files( + Dir, ?RE_PREFIX".*\\.erl\$"), lists:append(Acc, Files) end, [], SrcDirs), @@ -645,7 +648,8 @@ compile_xrl_yrl(Config, Source, Target, Opts, Mod) -> gather_src([], Srcs) -> Srcs; gather_src([Dir|Rest], Srcs) -> - gather_src(Rest, Srcs ++ rebar_utils:find_files(Dir, ".*\\.erl\$")). + gather_src( + Rest, Srcs ++ rebar_utils:find_files(Dir, ?RE_PREFIX".*\\.erl\$")). -spec dirs(file:filename()) -> [file:filename()]. dirs(Dir) -> -- cgit v1.1