emqx/apps/emqx_mix_utils/lib/mix/tasks/compile.copy_srcs.ex

38 lines
988 B
Elixir

defmodule Mix.Tasks.Compile.CopySrcs do
use Mix.Task.Compiler
@recursive true
@impl true
def run(_args) do
Mix.Project.get!()
config = Mix.Project.config()
extra_dirs = config[:extra_dirs]
unless extra_dirs && is_list(extra_dirs) do
Mix.raise("application option :extra_dirs in #{Mix.Project.project_file()} must be a list of directories under the application")
end
app_root = File.cwd!()
app_build_path = Mix.Project.app_path(config)
for extra_dir <- extra_dirs do
src = Path.join([app_root, extra_dir])
dest = Path.join([app_build_path, extra_dir])
File.rm(dest)
case File.ln_s(src, dest) do
:ok ->
:ok
{:error, :eexist} ->
Mix.shell().info(IO.ANSI.format([:yellow, "#{dest} still exists after attempted removal"]))
:ok
{:error, error} ->
Mix.raise("error trying to link #{src} to #{dest}: #{error}")
end
end
{:noop, []}
end
end