   end
 
   defp mtimes(sources) do
-    Enum.reduce(sources, %{}, fn {source, files}, map ->
-      Enum.reduce([source | files], map, fn file, map ->
+    Enum.reduce(sources, %{}, fn source(source: source, external: external), map ->
+      Enum.reduce([source | external], map, fn file, map ->
         Map.put_new_lazy(map, file, fn -> Mix.Utils.last_modified(file) end)
       end)
     end)

        do: {module, kind, beam}
  end

  defp compile_manifest(manifest, modules, files, sources, stale, dest, opts) do
    Mix.Utils.compiling_n(length(stale), :ex)

    config = Mix.Project.config()

  have changed at runtime.
  """
  def compile(manifest, srcs, dest, force, opts) do
    all = Mix.Utils.extract_files(srcs, [:ex])
    {all_modules, all_sources} = parse_manifest(manifest)

    modified = Mix.Utils.last_modified(manifest)

    removed =
      for source(source: source) <- all_sources,
          not(source in all),
          do: source

