summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_port_compiler.erl25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/rebar_port_compiler.erl b/src/rebar_port_compiler.erl
index f6e6a53..1b46112 100644
--- a/src/rebar_port_compiler.erl
+++ b/src/rebar_port_compiler.erl
@@ -88,18 +88,37 @@
%%
compile(Config, AppFile) ->
+ %% Allow the user to specify that dependent files get built first
+ FirstFiles = expand_sources(rebar_config:get(Config,
+ port_first_files, []), []),
+
%% Compose list of sources from config file -- defaults to c_src/*.c
Sources = expand_sources(rebar_config:get_list(Config, port_sources,
["c_src/*.c"]), []),
+ Env = setup_env(Config),
+
+ {FirstNewBins, FirstExistingBins} = case FirstFiles of
+ [] ->
+ {[], []};
+ _ ->
+ compile_each(FirstFiles, Config,
+ Env, [], [])
+ end,
case Sources of
[] ->
ok;
_ ->
- Env = setup_env(Config),
+
+ %% Remove first files from found files
+ RestFiles = [Source || Source <- Sources,
+ not lists:member(Source, FirstFiles)],
%% Compile each of the sources
- {NewBins, ExistingBins} = compile_each(Sources, Config, Env,
- [], []),
+ {NewBins, ExistingBins} = compile_each(RestFiles, Config, Env,
+ [], []),
+
+ NewBins = FirstNewBins ++ NewBins,
+ ExistingBins = FirstExistingBins ++ ExistingBins,
%% Construct the driver name and make sure priv/ exists
SoSpecs = so_specs(Config, AppFile, NewBins ++ ExistingBins),