<div dir="ltr"><div style>That&#39;s right, Roman, not knowing anything about it would be even better!</div><div style><br></div><div style>Here is the same dependency info in a different format.<br></div><div><br></div><div style>

I also noticed that cabal has a more complete implementation of Version. Couldn&#39;t this also move/merged with base (I think there is already a Version module in base or something like that).</div><div style><br></div>
<div style>
<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Sep 6, 2013 at 10:17 AM, Niklas Hambüchen <span dir="ltr">&lt;<a href="mailto:mail@nh2.me" target="_blank">mail@nh2.me</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Fri 06 Sep 2013 22:52:40 JST, Roman Cheplyaka wrote:<br>
&gt; The right solution for Cabal would be not to know anything about the<br>
&gt; GHC&#39;s database format at all.<br>
&gt;<br>
&gt; GHC and cabal communicate via a command line interface (`ghc-pkg dump`<br>
&gt; in our direction; `ghc-pkg update` in the other). So it would suffice to<br>
&gt; have a library which implements parsing and printing of the package<br>
&gt; description, and have that library shared between GHC and Cabal.<br>
<br>
</div>You are right. This is better.<br>
<br>
GHC&#39;s dependency on cabal seems to actually be quite minimal!<br>
<br>
I did a quick grep:<br>
<br>
% grep -rI &quot;import Distribution&quot; --include &quot;*.hs&quot; --include &quot;*.lhs*&quot; .<br>
| grep -v &quot;libraries/&quot; | grep -v Setup.hs | grep -v Setup.lhs | grep -v<br>
utils/haddock<br>
./utils/ghc-cabal/Main.hs:import Distribution.PackageDescription<br>
./utils/ghc-cabal/Main.hs:import Distribution.PackageDescription.Check<br>
hiding (doesFileExist)<br>
./utils/ghc-cabal/Main.hs:import<br>
Distribution.PackageDescription.Configuration<br>
./utils/ghc-cabal/Main.hs:import Distribution.PackageDescription.Parse<br>
./utils/ghc-cabal/Main.hs:import Distribution.System<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Configure<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.LocalBuildInfo<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Program<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Program.HcPkg<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Utils<br>
(defaultPackageDesc, writeFileAtomic, toUTF8)<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Build<br>
(writeAutogenFiles)<br>
./utils/ghc-cabal/Main.hs:import Distribution.Simple.Register<br>
./utils/ghc-cabal/Main.hs:import Distribution.Text<br>
./utils/ghc-cabal/Main.hs:import Distribution.Verbosity<br>
./utils/ghctags/Main.hs:import Distribution.Simple.GHC (<br>
componentGhcOptions )<br>
./utils/ghctags/Main.hs:import Distribution.Simple.Configure (<br>
getPersistBuildConfig )<br>
./utils/ghctags/Main.hs:import Distribution.Simple.Compiler (<br>
compilerVersion )<br>
./utils/ghctags/Main.hs:import Distribution.Simple.Program.GHC (<br>
renderGhcOptions )<br>
./utils/ghctags/Main.hs:import Distribution.PackageDescription (<br>
library, libBuildInfo )<br>
./utils/ghctags/Main.hs:import Distribution.Simple.LocalBuildInfo<br>
./utils/ghc-pkg/Main.hs:import<br>
Distribution.InstalledPackageInfo.Binary()<br>
./utils/ghc-pkg/Main.hs:import Distribution.ModuleName hiding (main)<br>
./utils/ghc-pkg/Main.hs:import Distribution.InstalledPackageInfo<br>
./utils/ghc-pkg/Main.hs:import Distribution.Compat.ReadP<br>
./utils/ghc-pkg/Main.hs:import Distribution.ParseUtils<br>
./utils/ghc-pkg/Main.hs:import Distribution.Package hiding (depends)<br>
./utils/ghc-pkg/Main.hs:import Distribution.Text<br>
./utils/ghc-pkg/Main.hs:import Distribution.Version<br>
./compiler/ghci/Linker.lhs:import Distribution.Package hiding (depends,<br>
PackageId)<br>
./compiler/main/Packages.lhs:import Distribution.InstalledPackageInfo<br>
./compiler/main/Packages.lhs:import<br>
Distribution.InstalledPackageInfo.Binary<br>
./compiler/main/Packages.lhs:import Distribution.Package hiding<br>
(PackageId,depends)<br>
./compiler/main/PackageConfig.hs:import<br>
Distribution.InstalledPackageInfo<br>
./compiler/main/PackageConfig.hs:import Distribution.ModuleName<br>
./compiler/main/PackageConfig.hs:import Distribution.Package hiding<br>
(PackageId)<br>
./compiler/main/PackageConfig.hs:import Distribution.Text<br>
./compiler/main/PackageConfig.hs:import Distribution.Version<br>
./compiler/main/Finder.lhs:import Distribution.Text<br>
./compiler/main/Finder.lhs:import Distribution.Package hiding<br>
(PackageId)<br>
<br>
As you can see, there are only 4 files in ghc itself that depend on<br>
Cabal:<br>
<br>
./compiler/ghci/Linker.lhs<br>
./compiler/main/Packages.lhs<br>
./compiler/main/PackageConfig.hs<br>
./compiler/main/Finder.lhs<br>
<br>
(plus 1 file for ghc-pkg: ./utils/ghc-pkg/Main.hs)<br>
<br>
The ones in GHC core seem to rely only on quite basic data types.<br>
<br>
 From this, I would boldly claim that people have spent more time making<br>
the GHC build system work with this Cabal dependency than it would take<br>
stripping it off!<br>
<br>
(In fact, I would try to do this right now if the GHC build system<br>
wouldn&#39;t take so long to compile even the smallest changes ...)<br>
</blockquote></div><br></div>