anchor.diff:          ebt__xl_file:write_term(Filename, ebt_applib:update(AppSpec, [{modules, Modules}, {vsn, Version}]))
       ]).
   
  --spec(compile(atom(), file:name(), file:name(), ebt_config:config()) -> ebt__error_m:monad(ok)).
  -compile(Target, SrcDir, OutDir, Config) when is_atom(Target) ->
  +-spec(compile(atom(), file:name(), file:name(), ebt_config:config(), {atom(), [[string()]]}) -> ebt__error_m:monad(ok)).
  +compile(Target, SrcDir, OutDir, Config, {Key, Defaults}) when is_atom(Target) ->
       ebt__do([ebt__error_m ||
           io:format("compiling ~s to ~s~n", [SrcDir, OutDir]),
           Includes <- return([{i, Lib} || Lib <- ebt_config:value(libraries, Config, [])]),
  
positive.code:         ebt__xl_file:mkdirs(OutDir),
          ebt__xl_lists:eforeach(fun(Files) ->
              compile_files(ebt__xl_file:wildcards(Files), Flags, OutDir, Config)
          end, ebt_config:value(Target, Config, sources, [["src/*.erl"]]))
      ]).
  
  compile_files(Files, Flags, OutDir, Config) ->
  
negative.code:     ebt__do([ebt__error_m ||
          AppProdDir <- ebt_config:app_outdir(production, Dir, Config),
          EbinProdDir <- return(AppProdDir ++ "/ebin"),
          compile(Target, SrcDir, EbinProdDir, Config, {sources, [["src/*.erl"]]}),
          AppSpec <- ebt_applib:load(SrcDir),
          update_app(AppSpec, EbinProdDir, Config),
          ebt__xl_file:copy_if_exists(Dir ++ "/src", AppProdDir),
  