@@ -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
@@ -49,8 +49,53 @@ defmodule Pow.MixProject do
4949 ]
5050 end
5151
52- defp elixirc_paths ( :test ) , do: [ "lib" , "test/support" ]
53- defp elixirc_paths ( _ ) , do: [ "lib" ]
52+ def elixirc_paths ( :test , _optional_deps ) , do: [ "lib" , "test/support" ]
53+ def elixirc_paths ( _ , optional_deps ) do
54+ case optional_deps_missing? ( optional_deps ) do
55+ true -> paths_without_missing_optional_deps ( optional_deps )
56+ false -> [ "lib" ]
57+ end
58+ end
59+
60+ def compilers ( optional_deps ) do
61+ case phoenix_missing? ( optional_deps ) do
62+ true -> [ :phoenix ] ++ Mix . compilers
63+ _ -> Mix . compilers ( )
64+ end
65+ end
66+
67+ defp phoenix_missing? ( optional_deps ) do
68+ Keyword . get ( optional_deps , :phoenix )
69+ end
70+
71+ defp optional_deps_missing? ( optional_deps ) do
72+ not Enum . empty? ( optional_deps_missing ( optional_deps ) )
73+ end
74+
75+ defp optional_deps_missing ( optional_deps ) do
76+ Enum . reject ( optional_deps , & elem ( & 1 , 1 ) )
77+ end
78+
79+ defp optional_deps do
80+ for dep <- [ :phoenix , :phoenix_html , :ecto , :plug ] do
81+ case Mix.ProjectStack . peek ( ) do
82+ % { config: config } -> { dep , Keyword . has_key? ( config [ :deps ] , dep ) }
83+ _ -> { dep , true }
84+ end
85+ end
86+ end
87+
88+ defp paths_without_missing_optional_deps ( optional_deps ) do
89+ deps = optional_deps_missing ( optional_deps )
90+
91+ "lib/**/*.ex"
92+ |> Path . wildcard ( )
93+ |> Enum . reject ( & reject_deps_path? ( deps , & 1 ) )
94+ end
95+
96+ defp reject_deps_path? ( deps , path ) do
97+ Enum . any? ( deps , & String . contains? ( path , "/#{ elem ( & 1 , 0 ) } " ) )
98+ end
5499
55100 defp package do
56101 [
0 commit comments