defmodule Vix.MixProject do use Mix.Project @version "0.17.0" @scm_url "https://github.com/akash-akya/vix" def project do [ app: :vix, version: @version, elixir: "~> 1.7", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), compilers: [:elixir_make] ++ Mix.compilers(), make_targets: ["all"], make_clean: ["clean"], deps: deps(), aliases: aliases(), # elixir_make config make_precompiler: make_precompiler(), make_precompiler_url: "#{@scm_url}/releases/download/v#{@version}/@{artefact_filename}", make_precompiler_priv_paths: [ "vix.*", "precompiled_libvips/lib/libvips.dylib", "precompiled_libvips/lib/libvips.*.dylib", "precompiled_libvips/lib/libvips.so", "precompiled_libvips/lib/libvips.so.*", "precompiled_libvips/lib/*.dll", "precompiled_libvips/lib/*.lib" ], make_force_build: make_force_build(), cc_precompiler: [ cleanup: "clean_precompiled_libvips", allow_missing_compiler: true, compilers: %{ {:unix, :linux} => %{ "x86_64-linux-gnu" => "x86_64-linux-gnu-", "aarch64-linux-gnu" => "aarch64-linux-gnu-", "armv7l-linux-gnueabihf" => "arm-linux-gnueabihf-", "x86_64-linux-musl" => "x86_64-linux-musl-", "aarch64-linux-musl" => "aarch64-linux-musl-" }, {:unix, :darwin} => %{ "x86_64-apple-darwin" => { "gcc", "g++", "<%= cc %> -arch x86_64", "<%= cxx %> -arch x86_64" }, "aarch64-apple-darwin" => { "gcc", "g++", "<%= cc %> -arch arm64", "<%= cxx %> -arch arm64" } }, {:win32, :nt} => %{} } ], # Coverage test_coverage: [tool: ExCoveralls], preferred_cli_env: [ coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, "coveralls.html": :test ], # Package package: package(), description: description(), # Docs source_url: @scm_url, homepage_url: @scm_url, docs: [ main: "readme", source_ref: "v#{@version}", extras: [ "README.md", "LICENSE", "livebooks/introduction.livemd", "livebooks/picture-language.livemd" ], groups_for_extras: [ Livebooks: Path.wildcard("livebooks/*.livemd") ] ] ] end def application do [ extra_applications: [:logger, :public_key] ] end defp description do "NIF based bindings for libvips" end defp package do [ maintainers: ["Akash Hiremath"], licenses: ["MIT"], files: ~w(lib build_scripts checksum.exs mix.exs README.md LICENSE Makefile c_src/Makefile c_src/*.{h,c} c_src/g_object/*.{h,c}), links: %{ GitHub: @scm_url, libvips: "https://libvips.github.io/libvips" } ] end defp deps do maybe_kino() ++ [ {:elixir_make, "~> 0.8 or ~> 0.7.3", runtime: false}, {:cc_precompiler, "~> 0.2 or ~> 0.1.4", runtime: false}, {:castore, "~> 1.0 or ~> 0.1"}, # development & test {:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.0", only: [:dev], runtime: false}, {:ex_doc, ">= 0.0.0", only: :dev}, {:excoveralls, "~> 0.15", only: :test}, {:temp, "~> 0.4", only: :test, runtime: false} ] end defp maybe_kino do if Version.compare(System.version(), "1.13.0") in [:gt, :eq] do [{:kino, "~> 0.7", optional: true}] else [] end end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp aliases do [ deep_clean: "cmd make clean_precompiled_libvips", precompile: [ "deep_clean", "elixir_make.precompile" ] ] end defp make_precompiler do if compilation_mode() == "PLATFORM_PROVIDED_LIBVIPS" do nil else {:nif, CCPrecompiler} end end defp make_force_build, do: compilation_mode() == "PRECOMPILED_LIBVIPS" defp compilation_mode do (System.get_env("VIX_COMPILATION_MODE") || "PRECOMPILED_NIF_AND_LIBVIPS") |> String.upcase() end end