Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

64 řádky
1.9 KiB

  1. -module(rebar_compiler_xrl).
  2. -behaviour(rebar_compiler).
  3. -export([context/1,
  4. needed_files/4,
  5. dependencies/3,
  6. compile/4,
  7. clean/2]).
  8. -export([update_opts/2]).
  9. context(AppInfo) ->
  10. Dir = rebar_app_info:dir(AppInfo),
  11. Mappings = [{".erl", filename:join([Dir, "src"])}],
  12. #{src_dirs => ["src"],
  13. include_dirs => [],
  14. src_ext => ".xrl",
  15. out_mappings => Mappings}.
  16. needed_files(_, FoundFiles, Mappings, AppInfo) ->
  17. FirstFiles = [],
  18. %% Remove first files from found files
  19. RestFiles = [Source || Source <- FoundFiles,
  20. not lists:member(Source, FirstFiles),
  21. rebar_compiler:needs_compile(Source, ".erl", Mappings)],
  22. Opts = rebar_opts:get(rebar_app_info:opts(AppInfo), xrl_opts, []),
  23. Opts1 = update_opts(Opts, AppInfo),
  24. {{FirstFiles, Opts1}, {RestFiles, Opts1}}.
  25. dependencies(_, _, _) ->
  26. [].
  27. compile(Source, [{_, _}], _, Opts) ->
  28. case leex:file(Source, [{return, true} | Opts]) of
  29. {ok, _} ->
  30. ok;
  31. {ok, _Mod, Ws} ->
  32. rebar_compiler:ok_tuple(Source, Ws);
  33. {error, Es, Ws} ->
  34. rebar_compiler:error_tuple(Source, Es, Ws, Opts)
  35. end.
  36. clean(XrlFiles, _AppInfo) ->
  37. rebar_file_utils:delete_each(
  38. [rebar_utils:to_list(re:replace(F, "\\.xrl$", ".erl", [unicode]))
  39. || F <- XrlFiles]).
  40. %% make includefile options absolute paths
  41. update_opts(Opts, AppInfo) ->
  42. OutDir = rebar_app_info:out_dir(AppInfo),
  43. lists:map(fun({includefile, I}) ->
  44. case filename:pathtype(I) =:= relative of
  45. true ->
  46. {includefile, filename:join(OutDir, I)};
  47. false ->
  48. {includefile, I}
  49. end;
  50. (O) ->
  51. O
  52. end, Opts).