defmodule Mix.Tasks.Compile.Pasexto do use Mix.Task.Compiler def run(_arg) do mode = if Mix.env() == :prod do "--release=fast" else "--release=off" end config = Mix.Project.config() app_priv = Path.join(Mix.Project.app_path(config), "priv") result = case System.cmd("zig", ["build", mode, "-p", app_priv], stderr_to_stdout: true) do {result, 0} -> result {result, errcode} -> Mix.raise(~s{Could not compile (exit status: #{errcode}).\n} <> result) end if match?({:unix, :darwin}, :os.type()) do lib = Path.join(app_priv, "lib/libcrypto_ext_nif.so") _ = :file.make_symlink("./libcrypto_ext_nif.dylib", lib) end IO.binwrite(result) end end defmodule Pasexto.MixProject do use Mix.Project @source_url "https://github.com/alexkornitzer/pasexto" @version "0.1.1" def project do [ app: :pasexto, version: @version, elixir: "~> 1.19", compilers: [:pasexto] ++ Mix.compilers(), start_permanent: Mix.env() == :prod, deps: deps(), elixirc_paths: elixirc_paths(Mix.env()), # Hex description: "A compliant and complete implementation of PASETO and PASERK.", package: package(), # Docs name: "pasexto", docs: docs() ] end def application do [ extra_applications: [:asn1, :crypto, :public_key] ] end defp deps do [ {:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.40", only: :dev, runtime: false} ] end defp docs do [ main: "Pasexto", source_ref: "v#{@version}", source_url: @source_url, extras: [] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp package do [ name: "pasexto", build_tools: ~w(mix zig), files: ~w(.formatter.exs CHANGELOG* LICENSE* README* build.zig lib mix.exs src zig), licenses: ["MIT"], links: %{"GitHub" => @source_url}, maintainers: ["Alex Kornitzer"] ] end end