@ -153,7 +153,7 @@ setup_env(Config) ->
DefaultEnvs = filter_envs ( default_env ( ) , [ ] ) ,
DefaultEnvs = filter_envs ( default_env ( ) , [ ] ) ,
PortEnvs = rebar_config : get_list ( Config , port_envs , [ ] ) ,
PortEnvs = rebar_config : get_list ( Config , port_envs , [ ] ) ,
OverrideEnvs = filter_envs ( PortEnvs , [ ] ) ,
OverrideEnvs = filter_envs ( PortEnvs , [ ] ) ,
RawEnv = DefaultEnvs ++ OverrideEnvs ++ os_env ( ) ,
RawEnv = apply_defaults ( os_env ( ) , DefaultEnvs ) ++ OverrideEnvs ,
expand_vars_loop ( merge_each_var ( RawEnv , [ ] ) ) .
expand_vars_loop ( merge_each_var ( RawEnv , [ ] ) ) .
% % == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
% % == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
@ -266,7 +266,24 @@ compiler(".c++") -> "$CXX";
compiler ( " .C " ) - > " $CXX " ;
compiler ( " .C " ) - > " $CXX " ;
compiler ( _ ) - > " $CC " .
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
% % 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
% % multiple times , walk the list and expand each self - reference so that we
@ -324,6 +341,16 @@ expand_vars(Key, Value, Vars) ->
[ ] , 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
% % Given env . variable FOO we want to expand all references to
% % it in InStr . References can have two forms : $F OO and ${ FOO }
% % it in InStr . References can have two forms : $F OO and ${ FOO }
@ -374,17 +401,20 @@ default_env() ->
{ " ERLANG_ARCH " , integer_to_list ( 8 * erlang : system_info ( wordsize ) ) } ,
{ " ERLANG_ARCH " , integer_to_list ( 8 * erlang : system_info ( wordsize ) ) } ,
{ " ERLANG_TARGET " , rebar_utils : get_arch ( ) } ,
{ " 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 " }
] .
] .