diff --git a/rebar.config.script b/rebar.config.script index 01274e3..82d7608 100644 --- a/rebar.config.script +++ b/rebar.config.script @@ -1,37 +1,120 @@ -ModCfg0 = fun(F, Cfg, [Key|Tail], Op, Default) -> - {OldVal,PartCfg} = case lists:keytake(Key, 1, Cfg) of - {value, {_, V1}, V2} -> {V1, V2}; - false -> {if Tail == [] -> Default; true -> [] end, Cfg} - end, - case Tail of - [] -> - [{Key, Op(OldVal)} | PartCfg]; - _ -> - [{Key, F(F, OldVal, Tail, Op, Default)} | PartCfg] - end - end, -ModCfg = fun(Cfg, Keys, Op, Default) -> ModCfg0(ModCfg0, Cfg, Keys, Op, Default) end. +%%%---------------------------------------------------------------------- +%%% File : rebar.config.script +%%% Author : Evgeniy Khramtsov +%%% Purpose : Rebar build script. Compliant with rebar and rebar3. +%%% Created : 8 May 2013 by Evgeniy Khramtsov +%%% +%%% Copyright (C) 2002-2017 ProcessOne, SARL. All Rights Reserved. +%%% +%%% Licensed under the Apache License, Version 2.0 (the "License"); +%%% you may not use this file except in compliance with the License. +%%% You may obtain a copy of the License at +%%% +%%% http://www.apache.org/licenses/LICENSE-2.0 +%%% +%%% Unless required by applicable law or agreed to in writing, software +%%% distributed under the License is distributed on an "AS IS" BASIS, +%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%%% See the License for the specific language governing permissions and +%%% limitations under the License. +%%% +%%%---------------------------------------------------------------------- -%% Rebar3 support for hex.pm support: -%% - Add rebar3_hex plugin IsRebar3 = case application:get_key(rebar, vsn) of - {ok, VSN} -> - [VSN1 | _] = string:tokens(VSN, "-"), - [Maj, Min, Patch] = string:tokens(VSN1, "."), - (list_to_integer(Maj) >= 3); - undefined -> - lists:keymember(mix, 1, application:loaded_applications()) - end, -Cfg = case IsRebar3 of - true -> - ModCfg(CONFIG, [plugins], fun(V) -> V ++ [rebar3_hex] end, []); - false -> - CONFIG - end, + {ok, VSN} -> + [VSN1 | _] = string:tokens(VSN, "-"), + [Maj, Min, Patch] = string:tokens(VSN1, "."), + (list_to_integer(Maj) >= 3); + undefined -> + lists:keymember(mix, 1, application:loaded_applications()) + end, -Cfg. +JobId = case os:getenv("TRAVIS_JOB_ID") of false -> ""; V -> V end, + +ModCfg0 = fun(F, Cfg, [Key|Tail], Op, Default) -> + {OldVal,PartCfg} = case lists:keytake(Key, 1, Cfg) of + {value, {_, V1}, V2} -> {V1, V2}; + false -> {if Tail == [] -> Default; true -> [] end, Cfg} + end, + case Tail of + [] -> + [{Key, Op(OldVal)} | PartCfg]; + _ -> + [{Key, F(F, OldVal, Tail, Op, Default)} | PartCfg] + end + end, + ModCfg = fun(Cfg, Keys, Op, Default) -> ModCfg0(ModCfg0, Cfg, Keys, Op, + Default) end, + + ModCfgS = fun(Cfg, Keys, Val) -> ModCfg0(ModCfg0, Cfg, Keys, fun(_V) -> + Val end, "") end, + + +FilterConfig = fun(F, Cfg, [{Path, true, ModFun, Default} | Tail]) -> + F(F, ModCfg0(ModCfg0, Cfg, Path, ModFun, Default), Tail); + (F, Cfg, [_ | Tail]) -> + F(F, Cfg, Tail); + (F, Cfg, []) -> + Cfg + end, + +AppendStr = fun(Append) -> + fun("") -> + Append; + (Val) -> + Val ++ " " ++ Append + end + end, +AppendList = fun(Append) -> + fun(Val) -> + Val ++ Append + end + end, + +Rebar3DepsFilter = fun(DepsList) -> + lists:map(fun({DepName,_, {git,_, {tag,Version}}}) -> + {DepName, Version}; + (Dep) -> + Dep + end, DepsList) + end, + +GlobalDepsFilter = fun(Deps) -> + DepNames = lists:map(fun({DepName, _, _}) -> DepName; + ({DepName, _}) -> DepName + end, Deps), + lists:filtermap(fun(Dep) -> + case code:lib_dir(Dep) of + {error, _} -> + {true,"Unable to locate dep '"++atom_to_list(Dep)++"' in system deps."}; + _ -> + false + end + end, DepNames) + end, + +Rules = [ + {[deps], IsRebar3, + Rebar3DepsFilter, []}, + {[plugins], IsRebar3, + AppendList([rebar3_hex, pc]), []}, + {[provider_hooks], IsRebar3, + AppendList([{pre, [ + {compile, {pc, compile}}, + {clean, {pc, clean}} + ]}]), []}, + {[deps], os:getenv("USE_GLOBAL_DEPS") /= false, + GlobalDepsFilter, []} + ], + + +Config = FilterConfig(FilterConfig, CONFIG, Rules), + +%io:format("Rules:~n~p~n~nCONFIG:~n~p~n~nConfig:~n~p~n", [Rules, CONFIG, Config]), + +Config. %% Local Variables: %% mode: erlang %% End: -%% vim: set filetype=erlang tabstop=8: \ No newline at end of file +%% vim: set filetype=erlang tabstop=8: