Current section
Files
Jump to
Current section
Files
mix.exs
defmodule Drafter.MixProject do
use Mix.Project
def project do
compile_nif()
[
app: :drafter,
version: "0.1.0",
elixir: "~> 1.18",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
description: "An Elixir Terminal User Interface framework",
package: package(),
consolidate_protocols: true,
source_url: "https://github.com/jaman/drafter",
homepage_url: "https://github.com/jaman/drafter",
docs: [
main: "Drafter",
extras: ["README.md"],
groups_for_modules: [
"Core": [Drafter, Drafter.App, Drafter.Widget, Drafter.Screen],
"Events": [Drafter.Event, Drafter.Event.Object, Drafter.Event.CustomRegistry, Drafter.Event.Delegation],
"Theming": [Drafter.Theme, Drafter.ThemeManager, Drafter.Color],
"Drawing": [Drafter.Draw.Segment, Drafter.Draw.Strip, Drafter.Draw.Canvas],
"Display Widgets": [Drafter.Widget.Label, Drafter.Widget.Markdown, Drafter.Widget.CodeView, Drafter.Widget.Digits, Drafter.Widget.ProgressBar, Drafter.Widget.LoadingIndicator, Drafter.Widget.Sparkline, Drafter.Widget.Pretty, Drafter.Widget.Log, Drafter.Widget.RichLog, Drafter.Widget.Rule, Drafter.Widget.Placeholder],
"Input Widgets": [Drafter.Widget.Button, Drafter.Widget.TextInput, Drafter.Widget.TextArea, Drafter.Widget.Checkbox, Drafter.Widget.Switch, Drafter.Widget.RadioSet, Drafter.Widget.SelectionList, Drafter.Widget.MaskedInput, Drafter.Widget.OptionList, Drafter.Widget.Link],
"Data Widgets": [Drafter.Widget.DataTable, Drafter.Widget.Tree, Drafter.Widget.DirectoryTree, Drafter.Widget.Chart],
"Layout Widgets": [Drafter.Widget.Container, Drafter.Widget.ScrollableContainer, Drafter.Widget.Grid, Drafter.Widget.Card, Drafter.Widget.Header, Drafter.Widget.Footer, Drafter.Widget.Collapsible, Drafter.Widget.TabbedContent],
"Testing": [Drafter.Test, Drafter.Test.Harness],
"Animation": [Drafter.Animation]
]
]
]
end
def application do
[
extra_applications: [:logger],
mod: {Drafter.Application, []}
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:phoenix_pubsub, "~> 2.1"},
{:ex_doc, "~> 0.34", only: :dev, runtime: false}
]
end
defp package do
[
maintainers: ["Drafter"],
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/jaman/drafter"}
]
end
defp compile_nif do
case :os.type() do
{:unix, _} -> do_compile_nif()
_ -> :ok
end
end
defp do_compile_nif do
priv_dir = Path.join([__DIR__, "priv"])
File.mkdir_p!(priv_dir)
source = Path.join([__DIR__, "c_src", "termios_nif.c"])
target = Path.join(priv_dir, "termios_nif.so")
if needs_recompile?(source, target) do
include_path = erts_include_path()
{cflags, ldflags} = platform_flags()
args = cflags ++ ["-I#{include_path}", "-o", target, source] ++ ldflags
case System.cmd("cc", args, stderr_to_stdout: true) do
{_, 0} ->
Mix.shell().info("Compiled termios NIF")
:ok
{output, _} ->
Mix.raise("Failed to compile termios NIF:\n#{output}")
end
else
:ok
end
end
defp needs_recompile?(source, target) do
not File.exists?(target) or
File.stat!(source).mtime > File.stat!(target).mtime
end
defp erts_include_path do
version = :erlang.system_info(:version) |> List.to_string()
Path.join([:code.root_dir(), "erts-#{version}", "include"])
end
defp platform_flags do
case :os.type() do
{:unix, :darwin} ->
{["-fPIC", "-O2"], ["-dynamiclib", "-undefined", "dynamic_lookup"]}
{:unix, _} ->
{["-fPIC", "-O2"], ["-shared"]}
_ ->
{[], []}
end
end
end