mirror of
https://github.com/correl/rebar.git
synced 2024-12-18 03:00:17 +00:00
Change logic to support more port env use cases
The logic changes from strict overrides to a hybrid for merging os_env and defaults, whereby defaults are chosen if they are not set in the os_env or if the defaults contains substitutions (at which point os environment is substituted). This still means that rebar.config works as it did before, where it overrides or substitutes based on the use of $VAR, but that default and os environment merging works such that the common cases of providing CC or LDFLAGS in the users environment or command line work as you might expect. In that CC is overriden by the os environment unless rebar.config overrides it, and LDFLAGS from the user environment is appended or prepended based on defaults and rebar.config. Addresses problems with https://github.com/basho/rebar/pull/71 Also keeps the fix for bug 255.
This commit is contained in:
parent
096e56d61c
commit
bc5aebcf5f
1 changed files with 41 additions and 11 deletions
|
@ -153,7 +153,7 @@ setup_env(Config) ->
|
|||
DefaultEnvs = filter_envs(default_env(), []),
|
||||
PortEnvs = rebar_config:get_list(Config, port_envs, []),
|
||||
OverrideEnvs = filter_envs(PortEnvs, []),
|
||||
RawEnv = DefaultEnvs ++ OverrideEnvs ++ os_env(),
|
||||
RawEnv = apply_defaults(os_env(), DefaultEnvs) ++ OverrideEnvs,
|
||||
expand_vars_loop(merge_each_var(RawEnv, [])).
|
||||
|
||||
%% ===================================================================
|
||||
|
@ -266,7 +266,24 @@ compiler(".c++") -> "$CXX";
|
|||
compiler(".C") -> "$CXX";
|
||||
compiler(_) -> "$CC".
|
||||
|
||||
|
||||
%%
|
||||
%% Given a list of {Key, Value} variables, and another list of default
|
||||
%% {Key, Value} variables, return a merged list where the rule is if the
|
||||
%% default is expandable expand it with the value of the variable list,
|
||||
%% otherwise just return the value of the variable.
|
||||
%%
|
||||
apply_defaults(Vars, Defaults) ->
|
||||
dict:to_list(
|
||||
dict:merge(fun(Key, VarValue, DefaultValue) ->
|
||||
case is_expandable(DefaultValue) of
|
||||
true ->
|
||||
expand_env_variable(DefaultValue,
|
||||
Key, VarValue);
|
||||
false -> VarValue
|
||||
end
|
||||
end,
|
||||
dict:from_list(Vars),
|
||||
dict:from_list(Defaults))).
|
||||
%%
|
||||
%% Given a list of {Key, Value} environment variables, where Key may be defined
|
||||
%% multiple times, walk the list and expand each self-reference so that we
|
||||
|
@ -324,6 +341,16 @@ expand_vars(Key, Value, Vars) ->
|
|||
[], Vars).
|
||||
|
||||
|
||||
%%
|
||||
%% Given a string, determine if it is expandable
|
||||
%%
|
||||
is_expandable(InStr) ->
|
||||
case re:run(InStr,"\\\$",[{capture,none}]) of
|
||||
match -> true;
|
||||
nomatch -> false
|
||||
end.
|
||||
|
||||
|
||||
%%
|
||||
%% Given env. variable FOO we want to expand all references to
|
||||
%% it in InStr. References can have two forms: $FOO and ${FOO}
|
||||
|
@ -374,17 +401,20 @@ default_env() ->
|
|||
{"ERLANG_ARCH", integer_to_list(8 * erlang:system_info(wordsize))},
|
||||
{"ERLANG_TARGET", rebar_utils:get_arch()},
|
||||
|
||||
{"solaris.*-64$", "CFLAGS", "-D_REENTRANT -m64"}, % Solaris specific flags
|
||||
{"solaris.*-64$", "CXXFLAGS", "-D_REENTRANT -m64"},
|
||||
{"solaris.*-64$", "LDFLAGS", "-m64"},
|
||||
%% Solaris specific flags
|
||||
{"solaris.*-64$", "CFLAGS", "-D_REENTRANT -m64 $CFLAGS"},
|
||||
{"solaris.*-64$", "CXXFLAGS", "-D_REENTRANT -m64 $CXXFLAGS"},
|
||||
{"solaris.*-64$", "LDFLAGS", "-m64 $LDFLAGS"},
|
||||
|
||||
{"darwin9.*-64$", "CFLAGS", "-m64"}, % OS X Leopard flags for 64-bit
|
||||
{"darwin9.*-64$", "CXXFLAGS", "-m64"},
|
||||
{"darwin9.*-64$", "LDFLAGS", "-arch x86_64"},
|
||||
%% OS X Leopard flags for 64-bit
|
||||
{"darwin9.*-64$", "CFLAGS", "-m64 $CFLAGS"},
|
||||
{"darwin9.*-64$", "CXXFLAGS", "-m64 $CXXFLAGS"},
|
||||
{"darwin9.*-64$", "LDFLAGS", "-arch x86_64 $LDFLAGS"},
|
||||
|
||||
{"darwin10.*-32", "CFLAGS", "-m32"}, % OS X Snow Leopard flags for 32-bit
|
||||
{"darwin10.*-32", "CXXFLAGS", "-m32"},
|
||||
{"darwin10.*-32", "LDFLAGS", "-arch i386"}
|
||||
%% OS X Snow Leopard flags for 32-bit
|
||||
{"darwin10.*-32", "CFLAGS", "-m32 $CFLAGS"},
|
||||
{"darwin10.*-32", "CXXFLAGS", "-m32 $CXXFLAGS"},
|
||||
{"darwin10.*-32", "LDFLAGS", "-arch i386 $LDFLAGS"}
|
||||
].
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue