Changeset 93


Ignore:
Timestamp:
01/29/10 07:56:02 (2 years ago)
Author:
dom
Message:

Include directories can be given to compiler

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/TODO

    r92 r93  
    1313 
    1414- detect -include dependencies and recompile all when .hrl changes 
    15 - allow giving additional include directories (for 3rd party libraries) 
    1615- run tests in parallel 
    1716- run a single (specific) test 
  • trunk/src/compiler.erl

    r90 r93  
    55-module (compiler). 
    66-export ([init/2]). 
     7-export ([init/3]). 
    78 
    89init (Notify, Dir) -> 
     10    init (Notify, Dir, []). 
     11 
     12init (Notify, Dir, Options) -> 
    913    Args = [Dir, notify_me ()], 
    1014    Watcher = spawn_link (directory_watcher, init_recursive, Args), 
    11     State = {dict: new (), [], []}, 
     15    State = {dict: new (), [], [], Options}, 
    1216    loop (Notify, Watcher, State). 
    1317 
     
    1620        check -> 
    1721            Watcher ! check, 
    18             {Modules, Binaries, Removed} = State, 
     22            {Modules, Binaries, Removed, Options} = State, 
    1923            case receive_files (Watcher, Modules) of 
    2024                Modules -> 
    2125                    loop (Notify, Watcher, State); 
    2226                Changed -> 
    23                     New_state = {Changed, Binaries, Removed}, 
     27                    New_state = {Changed, Binaries, Removed, Options}, 
    2428                    compile (Notify, Watcher, New_state) 
    2529            end; 
     
    3943 
    4044compile (Notify, Watcher, State) -> 
    41     {Modules, _, _} = State, 
     45    {Modules, _, _, _} = State, 
    4246    Notify (totals (Modules)), 
    4347    Process = process_fun (Notify), 
     
    4852process_fun (Notify) -> 
    4953    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), 
    5256            notify_result (Result, Notify), 
    5357            New_modules = dict: store (File, Result, Modules), 
    5458            Notify (totals (New_modules)), 
    5559            New_binaries = binaries (Result, Binaries), 
    56             {New_modules, New_binaries, Removed}; 
     60            {New_modules, New_binaries, Removed, Options}; 
    5761        (File, Event, Acc) when Event == lost -> 
    58             {Modules, Binaries, Removed} = Acc, 
     62            {Modules, Binaries, Removed, Options} = Acc, 
    5963            New_modules = dict: erase (File, Modules), 
    6064            New_removed = [modules: module_name (File) | Removed], 
    61             {New_modules, Binaries, New_removed}; 
     65            {New_modules, Binaries, New_removed, Options}; 
    6266        (_, _, Acc) -> 
    6367            Acc 
     
    9397 
    9498notify_end (Notify, State) -> 
    95     {Modules, _, _} = State, 
     99    {Modules, _, _, _} = State, 
    96100    notify_end (Notify, totals (Modules), State). 
    97101 
    98 notify_end (Notify, {N, N, N}, {Modules, Binaries, Removed}) -> 
     102notify_end (Notify, {N, N, N}, {Modules, Binaries, Removed, Options}) -> 
    99103    Notify ({{binaries, Binaries}, {removed, Removed}}), 
    100     {Modules, [], []}; 
     104    {Modules, [], [], Options}; 
    101105notify_end (_, _, State) -> 
    102106    State. 
  • trunk/src/compiler_test.erl

    r86 r93  
    1313-export ([notifies_removed_files_even_if_never_compiled/0]). 
    1414-export ([provides_all_binaries_not_just_latest_when_all_compiled/0]). 
     15-export ([can_be_given_include_directories/0]). 
    1516-include_lib("stdlib/include/ms_transform.hrl"). 
    1617 
     
    6364    ok = fixtures: use_tree (Tree, F). 
    6465 
     66can_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 
    6574provides_binaries_when_all_compiled (Root, _) -> 
    6675    Compiler = spawn_link (compiler, init, [notify_me (), Root]), 
     
    136145    ok. 
    137146 
     147include_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 
     155include_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     
    138164check ([{Total, 0, 0} | _] = Xs, unknown) -> 
    139165    check (Xs, Total); 
  • trunk/src/directory_tester.erl

    r90 r93  
    44 
    55-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]). 
    88 
    9 run_once ([Directory, Node]) when is_list (Node) -> 
    10     run_once (Directory, list_to_atom (Node)). 
     9run_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}]). 
    1112 
    12 run_once (Directory, Node) -> 
    13     run (start (Directory, Node)). 
     13run_once (Directory, Node, Options) -> 
     14    run (start (Directory, Node, Options)). 
    1415 
    15 init ([Directory, Node]) when is_list (Node) -> 
    16     init (Directory, list_to_atom (Node)). 
     16init ([Directory, Node | Include_directories]) when is_list (Node) -> 
     17    Options = [{i, I} || I <- Include_directories], 
     18    init (Directory, list_to_atom (Node), [{compiler, Options}]). 
    1719     
    18 init (Directory, Node) -> 
    19     loop (start (Directory, Node)). 
     20init (Directory, Node, Options) -> 
     21    loop (start (Directory, Node, Options)). 
    2022 
    21 start (Directory, Node) -> 
    22     Compiler = spawn_link (compiler, init, [notify_me (compiler), Directory]), 
     23start (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), 
    2327    Tester = spawn_link (tester, init, [notify_me (tester), Node]), 
    2428    Compiler ! check, 
     
    7680    Tester ! {run, Binaries}. 
    7781 
     82options (Key, List) -> 
     83    lists: concat (proplists: get_all_values (Key, List)). 
  • trunk/src/modules.erl

    r92 r93  
    77-export ([to_file_name/2]). 
    88-export ([forms_to_binary/1]). 
    9 -export ([compile/1]). 
     9-export ([compile/2, compile/1]). 
    1010-export ([module_name/1]). 
    1111-export ([locate/2]). 
    1212 
    1313to_binary (File_name) -> 
    14     {ok, _, Binary, _} = compile (fun compile: file/2, File_name), 
     14    {ok, _, Binary, _} = compile (fun compile: file/2, File_name, []), 
    1515    Binary. 
    1616 
     
    2020     
    2121forms_to_binary (Forms) -> 
    22     {ok, _, Binary, _} = compile (fun compile: forms/2, Forms), 
     22    {ok, _, Binary, _} = compile (fun compile: forms/2, Forms, []), 
    2323    Binary. 
    2424 
    25 compile (Fun, Parameter) -> 
    26     Options = [binary, return, warn_unused_import, debug_info], 
     25compile (Fun, Parameter, User_options) -> 
     26    Options = [binary, return, warn_unused_import, debug_info | User_options], 
    2727    Fun (Parameter, Options). 
    2828 
     29compile (File, Options) -> 
     30    compile (fun compile: file/2, File, Options). 
     31 
    2932compile (File) -> 
    30     compile (fun compile: file/2, File). 
     33    compile (File, []). 
    3134 
    3235module_name (Filename) -> 
Note: See TracChangeset for help on using the changeset viewer.