@@ -8,9 +8,9 @@ defmodule Pow.MixProject do
88 app: :pow ,
99 version: @ version ,
1010 elixir: "~> 1.6" ,
11- elixirc_paths: elixirc_paths ( Mix . env ( ) ) ,
11+ elixirc_paths: elixirc_paths ( Mix . env ( ) , optional_deps ( ) ) ,
1212 start_permanent: Mix . env ( ) == :prod ,
13- compilers: [ :phoenix ] ++ Mix . compilers ( ) ,
13+ compilers: compilers ( optional_deps ( ) ) ,
1414 deps: deps ( ) ,
1515
1616 # Hex
@@ -52,8 +52,53 @@ defmodule Pow.MixProject do
5252 ]
5353 end
5454
55- defp elixirc_paths ( :test ) , do: [ "lib" , "test/support" ]
56- defp elixirc_paths ( _ ) , do: [ "lib" ]
55+ def elixirc_paths ( :test , _optional_deps ) , do: [ "lib" , "test/support" ]
56+ def elixirc_paths ( _ , optional_deps ) do
57+ case optional_deps_missing? ( optional_deps ) do
58+ true -> paths_without_missing_optional_deps ( optional_deps )
59+ false -> [ "lib" ]
60+ end
61+ end
62+
63+ def compilers ( optional_deps ) do
64+ case phoenix_missing? ( optional_deps ) do
65+ true -> [ :phoenix ] ++ Mix . compilers
66+ _ -> Mix . compilers ( )
67+ end
68+ end
69+
70+ defp phoenix_missing? ( optional_deps ) do
71+ Keyword . get ( optional_deps , :phoenix )
72+ end
73+
74+ defp optional_deps_missing? ( optional_deps ) do
75+ not Enum . empty? ( optional_deps_missing ( optional_deps ) )
76+ end
77+
78+ defp optional_deps_missing ( optional_deps ) do
79+ Enum . reject ( optional_deps , & elem ( & 1 , 1 ) )
80+ end
81+
82+ defp optional_deps do
83+ for dep <- [ :phoenix , :phoenix_html , :ecto , :plug ] do
84+ case Mix.ProjectStack . peek ( ) do
85+ % { config: config } -> { dep , Keyword . has_key? ( config [ :deps ] , dep ) }
86+ _ -> { dep , true }
87+ end
88+ end
89+ end
90+
91+ defp paths_without_missing_optional_deps ( optional_deps ) do
92+ deps = optional_deps_missing ( optional_deps )
93+
94+ "lib/**/*.ex"
95+ |> Path . wildcard ( )
96+ |> Enum . reject ( & reject_deps_path? ( deps , & 1 ) )
97+ end
98+
99+ defp reject_deps_path? ( deps , path ) do
100+ Enum . any? ( deps , & String . contains? ( path , "/#{ elem ( & 1 , 0 ) } " ) )
101+ end
57102
58103 defp package do
59104 [
0 commit comments