cabal design

Isaac Jones ijones at
Sat Aug 20 14:54:47 EDT 2005

Frederik Eaton <frederik at> writes:

>> If they conform to the cabal standard, providing configure, build, and
>> install steps, then they are built exactly the same.  Can you be more
>> specific about your question?
> What I meant is, if a 'make'-based build depends on a cabal package
> being installed in a temporary location, how do we communicate to the
> 'make'-based build what that temporary location is? 

That is a good point... I actually wouldn't really expect people to
mix Simple build systems with Make build systems, but it could happen.
If so, all we'd need to specify for GHC is the location of the package
configuration file, which I would prefer to keep abstract if possible.
Maybe we'll see if this is actually a problem in practice.

>> I caution you, though, on spending too much time making plans and
>> designs and not much time writing code; the problem is usually that we
>> have plenty of ideas about what needs to get done and not enough
>> coders.  The code base is pretty manageable, so if you want to help
>> out, just pick something you think needs to get done, or ask me what
>> is most important and start working on it :) I usually ask for help on
>> this list when something comes up.
> I caution you on the opposite. Cabal is very format and
> protocol-heavy. I imagine that much of the work has gone into
> documentation and mindshare, in which case it becomes very important
> to keep people informed and working together. Suggesting that
> individuals need to contribute patches unilaterally before anything
> will happen seems counterproductive to me, at least when it comes to
> some of the larger parts.

I'd be happy to try the wiki idea.  I haven't done something like this
recently because I haven't identified such a need; if I had a wiki
page, I think I'd be the only one who reads it and the only one who
modifies it.  That's the case with the TODO list, which is under
version control, so theoretically anyone could modify it, but no one

I usually avoid adding "process" until a need arises.  If we were ever
in a situation where we need more analysis than code, then I would
spend more time writing documents and wikis (which we used to do much
more; you'll find old pages of discussion on the wiki, but not many
people besides me contributed; it was mostly copying and pasting from
mailing lists).  We spent a lot of time on discussion and
documentation early on in the project (probably a year), and the
original proposal was the product of that work.  I think that at some
point, we will want to commit to a "cabal version two" where we will
go into an analysis phase again.  I just don't think we're at that
point yet.  I still think we just need to get code out there for
people to try and see what works, what doesn't, and what the needs are
that we hadn't anticipated.  Cabal is still a very young project,
believe it or not, and we have spent a great deal of its lifetime
writing documentation and having discussions.  I hope you won't
begrudge me a few more months of writing code ;)

> On a meta-tangent, if we could be discussing things on a wiki, rather
> than a mailing list, then I think discussions could go a lot faster.
(snip for instance)

I am willing to try doing more on the wiki, but in the spirit of wiki,
I think you should just go ahead and start it :)

> I've attached a patch.


>> In a way, the problem isn't "lack of support" but a different model of
>> finding packages... It's not like a compiler extension that one system
>> supports and one doesn't; this flag breaks abstraction between
>> compilers in a way that --in-place does not.  I haven't heard any use
>> cases where --in-place won't work.
> Well, we're talking about two different features here. 

I'm talking about use cases, not features :)

> I want to be able to specify an arbitrary location. You want to be
> able to specify the current working directory. Not the same thing,
> is it? I think it should be possible to specify an arbitrary
> location, at least for ghc.

Since this breaks abstraction, I would prefer to avoid this until I
see a convincing use case.

>> >> > 6) I think it should be easy to use 'cabal' for development; however,
>> >> > when I am building a package with multiple executables, every 'build'
>> >> > seems to re-link each executable, regardless of whether it needs
>> >> > re-linking or not, which is quite slow. 
>> >> 
>> >> I'm not sure why ghc --make re-links executables every time.
>> >> 
>> >> For libraries, I think we could use support from ghc to tell whether
>> >> we need to re-link the library; ghc goes through and skips stuff that
>> >> doesn't need to get built, and then we link everything in the library;
>> >> if ghc could somehow let us know that nothing needed to get built,
>> >> that would be very helpful; otherwise, someone has to write the logic
>> >> to go through and check it all just like ghc does.  This code should
>> >> be out there somewhere.
>> >
>> > Isn't there a way to get ghc to emit Makefile fragments which solves
>> > this problem? Not that solving it in ghc wouldn't be good as well.
>> Relying on Make isn't any good for us for the simple build
>> infrastructure; it needs to be more portable than that.
> Really? Surely every platform has some basic 'make' installed. 

I don't think it's the case that every platform has make installed.
Windows, for instance.  In fact, one convincing argument for cabal is
that it doesn't require make.

> And just parsing out the rules can't be that hard.

Interpreting a makefile is probably pretty hard.  I don't want to do
it, personally.  But the rules that ghc produces are probably a subset
of the entire make language... still, I'd think that it would be far
more productive to write a dependency analizer that doesn't rely on
ghc than to write a makefile interpreter that does.

Writing a dependency analyzer for haskell files would be a huge
benefit to cabal.  Chalk that up there with important things to do
along with fixing up the test suite and such if you start the wiki



More information about the Libraries mailing list