D.Program depends on D.Simple.Utils

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Thu Aug 23 08:32:02 EDT 2007


On Thu, 2007-08-23 at 11:57 +0200, Clemens Fruhwirth wrote:
> Hi,
> 
> I was about to extend Dist.Simple.Utils with a method called
> mkSharedLibName, which depends on Compiler information, hence
> Dist.Simple.Utils was about to import Dist.Compiler. I ran into this
> dependency loop:
> 
> Module imports form a cycle for modules:
>   Cabal-1.1.7:Distribution.Compiler
>     imports: <..> Distribution.Program <...>
>   Cabal-1.1.7:Distribution.Program
>     imports: <..> Distribution.Simple.Utils <..>
>   Cabal-1.1.7:Distribution.Simple.Utils
>     imports: <..> Distribution.Compiler <..>
> make: *** [.depend] Error 1
> 
> After a short discussion on #ghc, Esa Ilari Vuokko explained that
> Dist.* is not supposed to depend on Dist.Simple.*, so it seems
> reasonable to break the dependency cycle at "Program -> Simple.Utils".

Actually, I think Program and Compiler (though perhaps not
CompilerFlavour) should move under Simple. These two modules are
intimately connected with the simple build system, they're not just
declarative information like the rest of Distribution.*

So then it'd be ok for them to use Utils. If mkSharedLibName needs
Program then I don't think  should go in Utils. Why does it need
Program?

Perhaps those functions for constructing file names should go in the
InstallDirs module.

Duncan



More information about the cabal-devel mailing list