forked from basho/rebar
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit b7e2088
Showing
10 changed files
with
403 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
|
||
{'src/*', [{i, "include"}, {outdir, "ebin"}]}. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
|
||
* Major operations | ||
** Compile | ||
*** Code generation | ||
*** Compilation/linking | ||
*** App validation | ||
** Clean | ||
** ct testing | ||
** eunit testing | ||
** Installation | ||
** Doc generation | ||
|
||
* Modes/File types | ||
** Erlang | ||
** Port driver | ||
** NIF driver | ||
** SNMP MIBs | ||
** ASN.1 files | ||
|
||
* Misc. Notes | ||
** Port/NIF driver compilation needs pre/post hook | ||
** Need to support code generation for things like protobuf | ||
** Need to support compilation flags | ||
|
||
* Contexts | ||
** Application | ||
** General | ||
** Release ?! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{application, rebar, | ||
[{description, "Rebar: Erlang Build Tool"}, | ||
{vsn, "1"}, | ||
{modules, [ rebar_config, | ||
rebar_utils, | ||
rebar_app_utils, | ||
rebar_rel_utils, | ||
rebar_doterl_compiler]}, | ||
{registered, []}, | ||
{applications, [kernel, | ||
stdlib, | ||
sasl]}, | ||
{env, [ | ||
%% Key/value list of base/default configuration used by | ||
%% rebar_config during initialization | ||
{default_config, [ | ||
{app_modules, [ rebar_doterl_compiler ]} | ||
]} | ||
]} | ||
]}. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
|
||
-record(global_state, { working_dir }). | ||
|
||
-define(CONSOLE(Str, Args), io:format(Str, Args)). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
#!/usr/bin/env escript | ||
%% -*- erlang -*- | ||
|
||
%% ------------------------------------------------------------------- | ||
%% | ||
%% rebar: Erlang Build Tools | ||
%% | ||
%% Copyright (c) 2009 Dave Smith (dizzyd@dizzyd.com) | ||
%% | ||
%% Permission is hereby granted, free of charge, to any person obtaining a copy | ||
%% of this software and associated documentation files (the "Software"), to deal | ||
%% in the Software without restriction, including without limitation the rights | ||
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
%% copies of the Software, and to permit persons to whom the Software is | ||
%% furnished to do so, subject to the following conditions: | ||
%% | ||
%% The above copyright notice and this permission notice shall be included in | ||
%% all copies or substantial portions of the Software. | ||
%% | ||
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
%% THE SOFTWARE. | ||
%% ------------------------------------------------------------------- | ||
|
||
-include_lib("rebar/include/rebar.hrl"). | ||
|
||
main([CommandStr | _Args]) -> | ||
%% Pre-load the rebar app so that we get default configuration | ||
application:load(rebar), | ||
|
||
%% Convert the command into an atom for convenience | ||
Command = list_to_atom(CommandStr), | ||
|
||
%% From the current working directory, search recursively and find | ||
%% all the application and release directories. We always terminate the | ||
%% recursion at an application or release directory. | ||
Cwd = rebar_utils:get_cwd(), | ||
case target_type(Cwd) of | ||
undefined -> | ||
Targets = find_targets(Cwd); | ||
{Type, Filename} -> | ||
Targets = [{Type, Cwd, Filename}] | ||
end, | ||
|
||
%% Filter out all the targets, based on the specified command. | ||
FilteredTargets = [{Type, Dir, Filename} || {Type, Dir, Filename} <- Targets, | ||
valid_command(Command, Type) == true], | ||
|
||
%% Prefix all the app targets to the code path so that inter-app compilation | ||
%% works properly | ||
update_code_path(FilteredTargets), | ||
|
||
%% Finally, apply the specified command to each target | ||
apply_command(FilteredTargets, Command); | ||
main(_) -> | ||
io:format("usage: rebar <command>\n"). | ||
|
||
|
||
%% | ||
%% Recursively find all the targets starting at a root directory | ||
%% | ||
find_targets(Root) -> | ||
{ok, Files} = file:list_dir(Root), | ||
find_targets(Files, Root, []). | ||
|
||
find_targets([], _Root, Acc) -> | ||
Acc; | ||
find_targets([F | Rest], Root, Acc) -> | ||
AbsName = filename:join([Root, F]), | ||
case target_type(AbsName) of | ||
undefined -> | ||
case filelib:is_dir(AbsName) of | ||
true -> | ||
{ok, SubFiles} = file:list_dir(AbsName), | ||
Acc2 = find_targets(SubFiles, AbsName, Acc); | ||
false -> | ||
Acc2 = Acc | ||
end; | ||
{Type, Filename} -> | ||
Acc2 = [{Type, AbsName, Filename} | Acc] | ||
end, | ||
find_targets(Rest, Root, Acc2). | ||
|
||
%% | ||
%% Determine the target type of a given file: app, rel or undefined | ||
%% | ||
target_type(AbsName) -> | ||
case rebar_app_utils:is_app_dir(AbsName) of | ||
{true, AppFile} -> | ||
{app, AppFile}; | ||
false -> | ||
case rebar_rel_utils:is_rel_dir(AbsName) of | ||
true -> | ||
{rel, ""}; | ||
false -> | ||
undefined | ||
end | ||
end. | ||
|
||
|
||
%% | ||
%% Given a command and target type, determine if the command is applicable | ||
%% | ||
valid_command(compile, app) -> true; | ||
valid_command(clean, _Any) -> true; | ||
valid_command(_, _) -> false. | ||
|
||
|
||
%% | ||
%% Add all application targets to the front of the code path | ||
%% | ||
update_code_path([]) -> | ||
ok; | ||
update_code_path([{app, Dir, _} | Rest]) -> | ||
EbinDir = filename:join([Dir, "ebin"]), | ||
true = code:add_patha(EbinDir), | ||
update_code_path(Rest); | ||
update_code_path([_ | Rest]) -> | ||
update_code_path(Rest). | ||
|
||
|
||
apply_command([], _Command) -> | ||
ok; | ||
apply_command([{Type, Dir, File} | Rest], Command) -> | ||
ok = file:set_cwd(Dir), | ||
Config = rebar_config:new(Dir), | ||
|
||
%% Pull the list of modules that are associated with Type operations. Each module | ||
%% will be inspected for a function matching Command and if found, will execute that. | ||
Modules = rebar_config:get_modules(Config, Type), | ||
case catch(run_modules(Modules, Command, Config, File)) of | ||
ok -> | ||
apply_command(Rest, Command); | ||
Other -> | ||
?CONSOLE("Execution of ~p failed while processing ~s: ~p", [Command, Dir, Other]) | ||
end. | ||
|
||
|
||
run_modules([], _Command, _Config, _File) -> | ||
ok; | ||
run_modules([Module | Rest], Command, Config, File) -> | ||
case Module:Command(Config, File) of | ||
ok -> | ||
run_modules(Rest, Command, Config, File); | ||
{error, Reason} -> | ||
{error, Reason} | ||
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
%% ------------------------------------------------------------------- | ||
%% | ||
%% rebar: Erlang Build Tools | ||
%% | ||
%% Copyright (c) 2009 Dave Smith (dizzyd@dizzyd.com) | ||
%% | ||
%% Permission is hereby granted, free of charge, to any person obtaining a copy | ||
%% of this software and associated documentation files (the "Software"), to deal | ||
%% in the Software without restriction, including without limitation the rights | ||
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
%% copies of the Software, and to permit persons to whom the Software is | ||
%% furnished to do so, subject to the following conditions: | ||
%% | ||
%% The above copyright notice and this permission notice shall be included in | ||
%% all copies or substantial portions of the Software. | ||
%% | ||
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
%% THE SOFTWARE. | ||
%% ------------------------------------------------------------------- | ||
-module(rebar_app_utils). | ||
|
||
-export([is_app_dir/0, is_app_dir/1]). | ||
|
||
is_app_dir() -> | ||
is_app_dir(rebar_util:get_cwd()). | ||
|
||
is_app_dir(Dir) -> | ||
Fname = filename:join([Dir, "ebin/*.app"]), | ||
case filelib:wildcard(Fname) of | ||
[AppFile] -> | ||
{true, AppFile}; | ||
_ -> | ||
false | ||
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
%% ------------------------------------------------------------------- | ||
%% | ||
%% rebar: Erlang Build Tools | ||
%% | ||
%% Copyright (c) 2009 Dave Smith (dizzyd@dizzyd.com) | ||
%% | ||
%% Permission is hereby granted, free of charge, to any person obtaining a copy | ||
%% of this software and associated documentation files (the "Software"), to deal | ||
%% in the Software without restriction, including without limitation the rights | ||
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
%% copies of the Software, and to permit persons to whom the Software is | ||
%% furnished to do so, subject to the following conditions: | ||
%% | ||
%% The above copyright notice and this permission notice shall be included in | ||
%% all copies or substantial portions of the Software. | ||
%% | ||
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
%% THE SOFTWARE. | ||
%% ------------------------------------------------------------------- | ||
-module(rebar_config). | ||
|
||
-export([new/1, | ||
get_modules/2]). | ||
|
||
-record(config, { dir, | ||
opts }). | ||
|
||
new(Dir) -> | ||
{ok, DefaultConfig} = application:get_env(rebar, default_config), | ||
#config { dir = Dir, | ||
opts = orddict:from_list(DefaultConfig)}. | ||
|
||
get_modules(Config, app) -> | ||
case orddict:find(app_modules, Config#config.opts) of | ||
error -> | ||
[]; | ||
{ok, Modules} -> | ||
Modules | ||
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
%% ------------------------------------------------------------------- | ||
%% | ||
%% rebar: Erlang Build Tools | ||
%% | ||
%% Copyright (c) 2009 Dave Smith (dizzyd@dizzyd.com) | ||
%% | ||
%% Permission is hereby granted, free of charge, to any person obtaining a copy | ||
%% of this software and associated documentation files (the "Software"), to deal | ||
%% in the Software without restriction, including without limitation the rights | ||
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
%% copies of the Software, and to permit persons to whom the Software is | ||
%% furnished to do so, subject to the following conditions: | ||
%% | ||
%% The above copyright notice and this permission notice shall be included in | ||
%% all copies or substantial portions of the Software. | ||
%% | ||
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
%% THE SOFTWARE. | ||
%% ------------------------------------------------------------------- | ||
-module(rebar_doterl_compiler). | ||
|
||
-export([compile/2, | ||
clean/2]). | ||
|
||
-include("rebar.hrl"). | ||
|
||
%% =================================================================== | ||
%% Public API | ||
%% =================================================================== | ||
|
||
compile(Config, Dir) -> | ||
io:format(".erl compiling: ~s\n", [Dir]), | ||
ok. | ||
|
||
clean(Config, Dir) -> | ||
rebar_utils:delete_files("ebin/*.beam"). | ||
|
||
|
||
%% =================================================================== | ||
%% Internal functions | ||
%% =================================================================== |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
%% ------------------------------------------------------------------- | ||
%% | ||
%% rebar: Erlang Build Tools | ||
%% | ||
%% Copyright (c) 2009 Dave Smith (dizzyd@dizzyd.com) | ||
%% | ||
%% Permission is hereby granted, free of charge, to any person obtaining a copy | ||
%% of this software and associated documentation files (the "Software"), to deal | ||
%% in the Software without restriction, including without limitation the rights | ||
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
%% copies of the Software, and to permit persons to whom the Software is | ||
%% furnished to do so, subject to the following conditions: | ||
%% | ||
%% The above copyright notice and this permission notice shall be included in | ||
%% all copies or substantial portions of the Software. | ||
%% | ||
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
%% THE SOFTWARE. | ||
%% ------------------------------------------------------------------- | ||
-module(rebar_rel_utils). | ||
|
||
-export([is_rel_dir/0, is_rel_dir/1]). | ||
|
||
is_rel_dir() -> | ||
is_rel_dir(rebar_util:get_cwd()). | ||
|
||
is_rel_dir(Dir) -> | ||
case filelib:wildcard("*.rel") of | ||
[_File] -> | ||
true; | ||
_ -> | ||
false | ||
end. |
Oops, something went wrong.