From 08ca3b33c2aed866a4520106fa3953fe8c583bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 23 Jul 2013 13:54:39 +0200 Subject: [PATCH] Search through a list of compilers to compile the NIF --- mix.exs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/mix.exs b/mix.exs index 42eebb2..d8636c4 100644 --- a/mix.exs +++ b/mix.exs @@ -8,6 +8,9 @@ defmodule Mix.Tasks.Compile.Nif do paths = Keyword.fetch!(config, :paths) flags = Keyword.fetch!(config, :flags) exts = Keyword.fetch!(config, :exts) + compiler = + Keyword.get(config, :compilers, ["cc", "gcc", "clang"]) + |> find_compiler # Create the directory (e.g. "priv/") file |> Path.dirname |> File.mkdir_p! @@ -15,16 +18,29 @@ defmodule Mix.Tasks.Compile.Nif do # Figure out whether we should compile the NIF. Compare the source # files with the target binary. If the target is newer, recompile. to_compile = Mix.Utils.extract_files(paths, exts) - stale = Mix.Utils.extract_stale(to_compile, [file]) - case stale do + + case Mix.Utils.extract_stale(to_compile, [file]) do [] -> :noop _ -> - filesarg = Enum.join(to_compile, " ") - cmd = "gcc -shared -fpic -o #{file} #{filesarg} #{flags}" + cmd = + [compiler, "-shared", "-fpic", "-o #{file}", to_compile, flags] + |> List.flatten + |> Enum.join(" ") + IO.puts System.cmd(cmd) end end + + defp find_compiler([compiler | tail]) do + case System.find_executable(compiler) do + nil -> + find_compiler(tail) + path -> + path + end + end + end defmodule Geef.Mixfile do