anchor.diff:      lists:foreach(fun(D) -> delete_dir(D, dirs(D)) end, Subdirs),
       file:del_dir(Dir).
   
  -parse_attrs(Fd, Includes) ->
  +parse_attrs(Fd, Includes, Dir) ->
       case io:parse_erl_form(Fd, "") of
           {ok, Form, _Line} ->
               case erl_syntax:type(Form) of
                   attribute ->
  -                    NewIncludes = process_attr(Form, Includes),
  -                    parse_attrs(Fd, NewIncludes);
  +                    NewIncludes = process_attr(Form, Includes, Dir),
  +                    parse_attrs(Fd, NewIncludes, Dir);
                   _ ->
  -                    parse_attrs(Fd, Includes)
  +                    parse_attrs(Fd, Includes, Dir)
               end;
           {eof, _} ->
               Includes;
           _Err ->
  -            parse_attrs(Fd, Includes)
  -    end.
  -
  -process_attr(Form, Includes) ->
  +            parse_attrs(Fd, Includes, Dir)
  +    end.
  +
  +process_attr(Form, Includes, Dir) ->
       AttrName = erl_syntax:atom_value(erl_syntax:attribute_name(Form)),
  -    process_attr(AttrName, Form, Includes).
  -
  -process_attr(import, Form, Includes) ->
  +    process_attr(AttrName, Form, Includes, Dir).
  +
  +process_attr(import, Form, Includes, _Dir) ->
       case erl_syntax_lib:analyze_import_attribute(Form) of
           {Mod, _Funs} ->
               [module_to_erl(Mod)|Includes];
           Mod ->
               [module_to_erl(Mod)|Includes]
       end;
  -process_attr(file, Form, Includes) ->
  +process_attr(file, Form, Includes, _Dir) ->
       {File, _} = erl_syntax_lib:analyze_file_attribute(Form),
       [File|Includes];
  -process_attr(include, Form, Includes) ->
  +process_attr(include, Form, Includes, _Dir) ->
       [FileNode] = erl_syntax:attribute_arguments(Form),
       File = erl_syntax:string_value(FileNode),
       [File|Includes];
  -process_attr(include_lib, Form, Includes) ->
  +process_attr(include_lib, Form, Includes, Dir) ->
       [FileNode] = erl_syntax:attribute_arguments(Form),
       RawFile = erl_syntax:string_value(FileNode),
  -    maybe_expand_include_lib_path(RawFile) ++ Includes;
  -process_attr(behaviour, Form, Includes) ->
  +    maybe_expand_include_lib_path(RawFile, Dir) ++ Includes;
  +process_attr(behaviour, Form, Includes, _Dir) ->
       [FileNode] = erl_syntax:attribute_arguments(Form),
       File = module_to_erl(erl_syntax:atom_value(FileNode)),
       [File|Includes];
  -process_attr(compile, Form, Includes) ->
  +process_attr(compile, Form, Includes, _Dir) ->
       [Arg] = erl_syntax:attribute_arguments(Form),
       case erl_syntax:concrete(Arg) of
           {parse_transform, Mod} ->
  
positive.code:                     digraph:del_vertex(G, Source),
                      modified;
                  LastModified when LastUpdated < LastModified ->
                      modify_erlcinfo(G, Source, LastModified, Dirs);
                  _ ->
                      Modified = lists:foldl(
                          update_erlcinfo_fun(G, Dirs),
  
negative.code:     digraph:add_vertex(G, Source, MaxModified),
      MaxModified.
  
  modify_erlcinfo(G, Source, LastModified, Dir, Dirs) ->
      {ok, Fd} = file:open(Source, [read]),
      Incls = parse_attrs(Fd, [], Dir),
      AbsIncls = expand_file_names(Incls, Dirs),
      ok = file:close(Fd),
      digraph:add_vertex(G, Source, LastModified),
  