diff --git a/bootstrap b/bootstrap index df09f7e..7d9a1c1 100755 --- a/bootstrap +++ b/bootstrap @@ -47,7 +47,9 @@ main(Args) -> end, %% Compile all src/*.erl to ebin - case make:files(filelib:wildcard("src/*.erl"), + %% To not accidentally try to compile files like Mac OS X resource forks, + %% we only look for rebar source files that start with a letter. + case make:files(filelib:wildcard("src/[a-zA-Z]*.erl"), [{outdir, "ebin"}, {i, "include"}, DebugFlag, NamespacedTypes, diff --git a/inttest/erlc/src/._do_not_compile.erl b/inttest/erlc/src/._do_not_compile.erl new file mode 100644 index 0000000..c9d743b --- /dev/null +++ b/inttest/erlc/src/._do_not_compile.erl @@ -0,0 +1,4 @@ +syntax error +this is file is here to verify that rebar does not try to +compile files like OS X resource forks and should not be +processed at all diff --git a/src/rebar_appups.erl b/src/rebar_appups.erl index a51c30d..38e7b72 100644 --- a/src/rebar_appups.erl +++ b/src/rebar_appups.erl @@ -70,7 +70,7 @@ %% Get a list of any appup files that exist in the new release NewAppUpFiles = rebar_utils:find_files( - filename:join([NewVerPath, "lib"]), "^.*.appup$"), + filename:join([NewVerPath, "lib"]), "^[^._].*.appup$"), %% Convert the list of appup files into app names AppUpApps = [file_to_name(File) || File <- NewAppUpFiles], diff --git a/src/rebar_base_compiler.erl b/src/rebar_base_compiler.erl index 1957070..b400512 100644 --- a/src/rebar_base_compiler.erl +++ b/src/rebar_base_compiler.erl @@ -28,8 +28,11 @@ -include("rebar.hrl"). --export([run/4, run/7, run/8, - ok_tuple/3, error_tuple/5]). +-export([run/4, + run/7, + run/8, + ok_tuple/3, + error_tuple/5]). %% =================================================================== %% Public API @@ -60,7 +63,7 @@ run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt, run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt, Compile3Fn, Opts) -> %% Convert simple extension to proper regex - SourceExtRe = ".*\\" ++ SourceExt ++ [$$], + SourceExtRe = "^[^._].*\\" ++ SourceExt ++ [$$], Recursive = proplists:get_value(recursive, Opts, true), %% Find all possible source files diff --git a/src/rebar_core.erl b/src/rebar_core.erl index 212365b..4557bb8 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -593,8 +593,7 @@ load_plugin_modules(Config, PredirsAssoc, Modules) -> ?DEBUG("Plugin dirs for ~s:~n~p~n", [Cwd, PluginDirs]), %% Find relevant sources in base_dir and plugin_dir - Erls = string:join([atom_to_list(M)++"\\.erl" || M <- Modules], "|"), - RE = "^" ++ Erls ++ "\$", + RE = string:join([atom_to_list(M)++"\\.erl" || M <- Modules], "|"), %% If a plugin is found both in base_dir and plugin_dir, the clash %% will provoke an error and we'll abort. Sources = [rebar_utils:find_files(PD, RE, false) || PD <- PluginDirs], 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) -> diff --git a/src/rebar_protobuffs_compiler.erl b/src/rebar_protobuffs_compiler.erl index 579ecfb..e89c700 100644 --- a/src/rebar_protobuffs_compiler.erl +++ b/src/rebar_protobuffs_compiler.erl @@ -39,7 +39,7 @@ %% =================================================================== compile(Config, _AppFile) -> - case rebar_utils:find_files("src", ".*\\.proto$") of + case rebar_utils:find_files("src", "^[^._].*\\.proto$") of [] -> ok; FoundFiles -> diff --git a/src/rebar_qc.erl b/src/rebar_qc.erl index e08833b..2c565f1 100644 --- a/src/rebar_qc.erl +++ b/src/rebar_qc.erl @@ -208,7 +208,7 @@ qc_module(QC=eqc, [], M) -> QC:module(M); qc_module(QC=eqc, QCOpts, M) -> QC:module(QCOpts, M). find_prop_mods() -> - Beams = rebar_utils:find_files(?QC_DIR, ".*\\.beam\$"), + Beams = rebar_utils:find_files(?QC_DIR, "^[^._].*\\.beam\$"), [M || M <- [rebar_utils:erl_to_mod(Beam) || Beam <- Beams], has_prop(M)]. has_prop(Mod) -> diff --git a/src/rebar_templater.erl b/src/rebar_templater.erl index 4abf404..dd89f3a 100644 --- a/src/rebar_templater.erl +++ b/src/rebar_templater.erl @@ -41,7 +41,7 @@ -include("rebar.hrl"). --define(TEMPLATE_RE, ".*\\.template\$"). +-define(TEMPLATE_RE, "^[^._].*\\.template\$"). %% =================================================================== %% Public API