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ů.

49 řádky
1.5 KiB

  1. -module(rebar_compiler_yrl).
  2. -behaviour(rebar_compiler).
  3. -export([context/1,
  4. needed_files/3,
  5. dependencies/3,
  6. compile/4,
  7. clean/2]).
  8. context(AppInfo) ->
  9. Dir = rebar_app_info:dir(AppInfo),
  10. Mappings = [{".erl", filename:join([Dir, "src"])}],
  11. #{src_dirs => ["src"],
  12. include_dirs => [],
  13. src_ext => ".yrl",
  14. out_mappings => Mappings}.
  15. needed_files(_, FoundFiles, AppInfo) ->
  16. FirstFiles = [],
  17. %% Remove first files from found files
  18. RestFiles = [Source || Source <- FoundFiles, not lists:member(Source, FirstFiles)],
  19. Opts = rebar_opts:get(rebar_app_info:opts(AppInfo), yrl_opts, []),
  20. {{FirstFiles, Opts}, {RestFiles, Opts}}.
  21. dependencies(_, _, _) ->
  22. [].
  23. compile(Source, [{_, OutDir}], _, Opts) ->
  24. BaseName = filename:basename(Source),
  25. Target = filename:join([OutDir, BaseName]),
  26. AllOpts = [{parserfile, Target} | Opts],
  27. AllOpts1 = [{includefile, filename:join(OutDir, I)} || {includefile, I} <- AllOpts,
  28. filename:pathtype(I) =:= relative],
  29. case yeec:file(Source, AllOpts1 ++ [{return, true}]) of
  30. {ok, _} ->
  31. ok;
  32. {ok, _Mod, Ws} ->
  33. rebar_compiler:ok_tuple(Source, Ws);
  34. {error, Es, Ws} ->
  35. rebar_compiler:error_tuple(Source, Es, Ws, AllOpts1)
  36. end.
  37. clean(YrlFiles, _AppInfo) ->
  38. rebar_file_utils:delete_each(
  39. [rebar_utils:to_list(re:replace(F, "\\.yrl$", ".erl", [unicode]))
  40. || F <- YrlFiles]).