Changeset 93
- Timestamp:
- 01/29/10 07:56:02 (2 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
doc/TODO (modified) (1 diff)
-
src/compiler.erl (modified) (5 diffs)
-
src/compiler_test.erl (modified) (3 diffs)
-
src/directory_tester.erl (modified) (2 diffs)
-
src/modules.erl (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/TODO
r92 r93 13 13 14 14 - detect -include dependencies and recompile all when .hrl changes 15 - allow giving additional include directories (for 3rd party libraries)16 15 - run tests in parallel 17 16 - run a single (specific) test -
trunk/src/compiler.erl
r90 r93 5 5 -module (compiler). 6 6 -export ([init/2]). 7 -export ([init/3]). 7 8 8 9 init (Notify, Dir) -> 10 init (Notify, Dir, []). 11 12 init (Notify, Dir, Options) -> 9 13 Args = [Dir, notify_me ()], 10 14 Watcher = spawn_link (directory_watcher, init_recursive, Args), 11 State = {dict: new (), [], [] },15 State = {dict: new (), [], [], Options}, 12 16 loop (Notify, Watcher, State). 13 17 … … 16 20 check -> 17 21 Watcher ! check, 18 {Modules, Binaries, Removed } = State,22 {Modules, Binaries, Removed, Options} = State, 19 23 case receive_files (Watcher, Modules) of 20 24 Modules -> 21 25 loop (Notify, Watcher, State); 22 26 Changed -> 23 New_state = {Changed, Binaries, Removed },27 New_state = {Changed, Binaries, Removed, Options}, 24 28 compile (Notify, Watcher, New_state) 25 29 end; … … 39 43 40 44 compile (Notify, Watcher, State) -> 41 {Modules, _, _ } = State,45 {Modules, _, _, _} = State, 42 46 Notify (totals (Modules)), 43 47 Process = process_fun (Notify), … … 48 52 process_fun (Notify) -> 49 53 fun (File, Event, Acc) when Event == found; Event == changed -> 50 {Modules, Binaries, Removed } = Acc,51 Result = modules: compile (File ),54 {Modules, Binaries, Removed, Options} = Acc, 55 Result = modules: compile (File, Options), 52 56 notify_result (Result, Notify), 53 57 New_modules = dict: store (File, Result, Modules), 54 58 Notify (totals (New_modules)), 55 59 New_binaries = binaries (Result, Binaries), 56 {New_modules, New_binaries, Removed };60 {New_modules, New_binaries, Removed, Options}; 57 61 (File, Event, Acc) when Event == lost -> 58 {Modules, Binaries, Removed } = Acc,62 {Modules, Binaries, Removed, Options} = Acc, 59 63 New_modules = dict: erase (File, Modules), 60 64 New_removed = [modules: module_name (File) | Removed], 61 {New_modules, Binaries, New_removed };65 {New_modules, Binaries, New_removed, Options}; 62 66 (_, _, Acc) -> 63 67 Acc … … 93 97 94 98 notify_end (Notify, State) -> 95 {Modules, _, _ } = State,99 {Modules, _, _, _} = State, 96 100 notify_end (Notify, totals (Modules), State). 97 101 98 notify_end (Notify, {N, N, N}, {Modules, Binaries, Removed }) ->102 notify_end (Notify, {N, N, N}, {Modules, Binaries, Removed, Options}) -> 99 103 Notify ({{binaries, Binaries}, {removed, Removed}}), 100 {Modules, [], [] };104 {Modules, [], [], Options}; 101 105 notify_end (_, _, State) -> 102 106 State. -
trunk/src/compiler_test.erl
r86 r93 13 13 -export ([notifies_removed_files_even_if_never_compiled/0]). 14 14 -export ([provides_all_binaries_not_just_latest_when_all_compiled/0]). 15 -export ([can_be_given_include_directories/0]). 15 16 -include_lib("stdlib/include/ms_transform.hrl"). 16 17 … … 63 64 ok = fixtures: use_tree (Tree, F). 64 65 66 can_be_given_include_directories () -> 67 Src = "-module(inc).\n-include(\"inc.hrl\").", 68 Inc = "-define(yo,\"YO\").", 69 Tree = [{directory, "include", [{file, "inc.hrl", Inc}]}, 70 {directory, "src", [{file, "inc.erl", Src}]}], 71 ok = fixtures: use_tree (Tree, fun include_no_directory/2), 72 ok = fixtures: use_tree (Tree, fun include_with_directory/2). 73 65 74 provides_binaries_when_all_compiled (Root, _) -> 66 75 Compiler = spawn_link (compiler, init, [notify_me (), Root]), … … 136 145 ok. 137 146 147 include_no_directory (Root, _) -> 148 Src = filename: join (Root, "src"), 149 Compiler = spawn_link (compiler, init, [notify_me (), Src]), 150 Compiler ! check, 151 [{1, 0, 0}, {_, _}, {1, 1, 0}] = receive_all (), 152 Compiler ! {self (), stop}, 153 ok. 154 155 include_with_directory (Root, _) -> 156 Src = filename: join (Root, "src"), 157 Inc = filename: join (Root, "include"), 158 Compiler = spawn_link (compiler, init, [notify_me (), Src, [{i, Inc}]]), 159 Compiler ! check, 160 [{1, 0, 0}, {1, 1, 1}, {{binaries, _}, _}] = receive_all (), 161 Compiler ! {self (), stop}, 162 ok. 163 138 164 check ([{Total, 0, 0} | _] = Xs, unknown) -> 139 165 check (Xs, Total); -
trunk/src/directory_tester.erl
r90 r93 4 4 5 5 -module (directory_tester). 6 -export ([init/1, init/ 2]).7 -export ([run_once/1, run_once/ 2]).6 -export ([init/1, init/3]). 7 -export ([run_once/1, run_once/3]). 8 8 9 run_once ([Directory, Node]) when is_list (Node) -> 10 run_once (Directory, list_to_atom (Node)). 9 run_once ([Directory, Node | Include_directories]) when is_list (Node) -> 10 Options = [{i, I} || I <- Include_directories], 11 run_once (Directory, list_to_atom (Node), [{compiler, Options}]). 11 12 12 run_once (Directory, Node ) ->13 run (start (Directory, Node )).13 run_once (Directory, Node, Options) -> 14 run (start (Directory, Node, Options)). 14 15 15 init ([Directory, Node]) when is_list (Node) -> 16 init (Directory, list_to_atom (Node)). 16 init ([Directory, Node | Include_directories]) when is_list (Node) -> 17 Options = [{i, I} || I <- Include_directories], 18 init (Directory, list_to_atom (Node), [{compiler, Options}]). 17 19 18 init (Directory, Node ) ->19 loop (start (Directory, Node )).20 init (Directory, Node, Options) -> 21 loop (start (Directory, Node, Options)). 20 22 21 start (Directory, Node) -> 22 Compiler = spawn_link (compiler, init, [notify_me (compiler), Directory]), 23 start (Directory, Node, Options) -> 24 Compiler_options = options (compiler, Options), 25 Compiler_args = [notify_me (compiler), Directory, Compiler_options], 26 Compiler = spawn_link (compiler, init, Compiler_args), 23 27 Tester = spawn_link (tester, init, [notify_me (tester), Node]), 24 28 Compiler ! check, … … 76 80 Tester ! {run, Binaries}. 77 81 82 options (Key, List) -> 83 lists: concat (proplists: get_all_values (Key, List)). -
trunk/src/modules.erl
r92 r93 7 7 -export ([to_file_name/2]). 8 8 -export ([forms_to_binary/1]). 9 -export ([compile/ 1]).9 -export ([compile/2, compile/1]). 10 10 -export ([module_name/1]). 11 11 -export ([locate/2]). 12 12 13 13 to_binary (File_name) -> 14 {ok, _, Binary, _} = compile (fun compile: file/2, File_name ),14 {ok, _, Binary, _} = compile (fun compile: file/2, File_name, []), 15 15 Binary. 16 16 … … 20 20 21 21 forms_to_binary (Forms) -> 22 {ok, _, Binary, _} = compile (fun compile: forms/2, Forms ),22 {ok, _, Binary, _} = compile (fun compile: forms/2, Forms, []), 23 23 Binary. 24 24 25 compile (Fun, Parameter ) ->26 Options = [binary, return, warn_unused_import, debug_info ],25 compile (Fun, Parameter, User_options) -> 26 Options = [binary, return, warn_unused_import, debug_info | User_options], 27 27 Fun (Parameter, Options). 28 28 29 compile (File, Options) -> 30 compile (fun compile: file/2, File, Options). 31 29 32 compile (File) -> 30 compile ( fun compile: file/2, File).33 compile (File, []). 31 34 32 35 module_name (Filename) ->
Note: See TracChangeset
for help on using the changeset viewer.
