File: rebar.config.script

package info (click to toggle)
erlang-p1-iconv 1.0.2-2~bpo7%2B1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy-backports-sloppy
  • size: 564 kB
  • sloc: sh: 4,170; ansic: 88; erlang: 65; makefile: 30
file content (112 lines) | stat: -rw-r--r-- 5,261 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
%%%----------------------------------------------------------------------
%%% File    : rebar.config.script
%%% Author  : Evgeniy Khramtsov <ekhramtsov@process-one.net>
%%% Purpose : Rebar build script. Compliant with rebar and rebar3.
%%% Created : 8 May 2013 by Evgeniy Khramtsov <ekhramtsov@process-one.net>
%%%
%%% Copyright (C) 2002-2015 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.
%%%
%%%----------------------------------------------------------------------

Cfg = case file:consult("vars.config") of
          {ok, Terms} ->
              Terms;
          _Err ->
              []
      end ++ [{cflags, "-g -O2 -Wall"}, {ldflags, ""}, {with_gcov, "false"}],
{cflags, CfgCFlags} = lists:keyfind(cflags, 1, Cfg),
{ldflags, CfgLDFlags} = lists:keyfind(ldflags, 1, Cfg),
{with_gcov, CfgWithGCov} = lists:keyfind(with_gcov, 1, Cfg),


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.

Cfg0 = ModCfg(CONFIG, [port_env, "CFLAGS"], fun(V) -> V ++ " " ++ CfgCFlags end, "$CFLAGS"),
Cfg00 = ModCfg(Cfg0, [port_env, "LDFLAGS"], fun(V) -> V ++ " " ++ CfgLDFlags end, "$LDFLAGS"),
Cfg1 = case CfgWithGCov of
           "true" ->
               V1 = ModCfg(Cfg00, [post_hooks], fun(V) -> V ++ [{eunit, "gcov -o c_src iconv"},
                                                                {eunit, "mv *.gcov .eunit/"}] end, []),
               V2 = ModCfg(V1, [port_env, "LDFLAGS"], fun(V) -> V ++ " --coverage" end, ""),
               ModCfg(V2, [port_env, "CFLAGS"], fun(V) -> V ++ " --coverage" end, "");
           _ ->
               Cfg00
       end,

%% Rebar3 support for hex.pm support:
%% - Transform dependencies specification to use hex.pm packages:
%%   deps of the form: {Name, _Vsn, {git, _URL, {tag, Version}}}
%%     are expected to refer to package and are rewritten for rebar3 as:
%%   {Name, Version}
%% - 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,
Cfg2 = case IsRebar3 of
           true ->
               DepsFun = fun(DepsList) -> lists:map(fun({DepName,_, {git,_, {tag,Version}}}) ->
                                                            {DepName, Version};
                                                       (Dep) ->
                                                            Dep
                                                    end, DepsList)
                         end,
               RB1 = ModCfg(Cfg1, [deps], DepsFun, []),
               RB2 = ModCfg(RB1, [plugins], fun(V) -> V ++ [rebar3_hex, pc] end, []),
               ModCfg(RB2, [provider_hooks], fun(V) -> V ++ [{pre,
							      [
							       {compile, {pc, compile}},
							       {clean, {pc, clean}}
							      ]
							     }] end, []);
           false ->
               Cfg1
       end,

%% When running Travis test, upload test coverage result to coveralls:
Config = case os:getenv("TRAVIS") of
             "true" ->
                 JobId = os:getenv("TRAVIS_JOB_ID"),
                 Cfg3 = ModCfg(Cfg2, [deps], fun(V) -> [{coveralls, ".*", {git, "https://github.com/markusn/coveralls-erl.git", "master"}}|V] end, []),
                 ModCfg(Cfg3, [post_hooks], fun(V) -> V ++ [{eunit, "echo '\n%%! -pa .eunit/ deps/coveralls/ebin\nmain(_)->{ok,F}=file:open(\"erlang.json\",[write]),io:fwrite(F,\"~s\",[coveralls:convert_file(\".eunit/cover.coverdata\", \""++JobId++"\", \"travis-ci\")]).' > getcover.erl"},
                                                                   {eunit, "escript ./getcover.erl"}] end, []);
             _ ->
                 Cfg2
         end,

%%io:format("Configuration:~n  ~p~n", [Config]),
Config.

%% Local Variables:
%% mode: erlang
%% End:
%% vim: set filetype=erlang tabstop=8: