"Setup.lhs: hope.cabal has been changed, please re-configure."

Peter Gammie peteg42 at gmail.com
Wed Dec 19 06:12:08 EST 2007

On 19/12/2007, at 5:18 PM, Duncan Coutts wrote:

> On Wed, 2007-12-19 at 15:57 +0700, Peter Gammie wrote:
>> Hello,
>> Thanks for your efforts with Cabal, it seems to work really well.
>> Can I suggest a few improvements to the above error message:
>> 1. Provide a flag "--force" that says "OK, the user knows
>> best." (Sometimes I change the .cabal file trivially, and really just
>> want to build the thing.) Indeed, a lot of commands might usefully be
>> "--force"d.
> Hmm, I'd rather not add a --force to anything. Where else would you  
> want
> --force?

Sorry, I typed that out without thinking too hard.

"configure" is another spot. I'm currently hacking a project with a  
lot of darcs-repo dependencies. Sometimes I do a "darcs pull" and the  
version requirements have changed, so I have to go and rebuild /  
install other packages. It's sometimes useful to say "hang it, just  
try to build it with what's already there". - in particular with e.g.  
HaXml, which has a lot of dependencies that I believe are satisfied in  
"base" for GHC 6.6.1, but is supplied with a .cabal file that doesn't  
take care to find them (presumably it works for 6.8.x).

This might be problematic for generating the GHC command line, I  
guess. Perhaps you could have a sloppy mode where you don't do any  
package hiding.

(In the case of HaXml I'm really just interested in building the doc's  
and seeing if they've added anything that requires a newer GHC, etc.)

>> 2. It is a bit unsound to say "please re-configure". You may also  
>> need
>> to "clean", if in fact the .cabal file has changed significantly.
> Really? Under what circumstances would that be necessary?

Ah, I remember now. Imagine this, similar to the above (I don't have  
to, I do this all the time :-):

- see a new version of something, update the cabal file to reflect new  
- we say "build", we get asked to "configure", so we do.
- if the API didn't change, then "build" does nothing, as GHC doesn't  
track dependencies across packages.

(at this point you may say that GHC should be ... adjusted, but I  
don't know what's involved.)

- then "install" might go through, but the higher-up library users may  
fail to link or screw up in magical mystical ways due to out-of-date  
dependencies at this level.

I hope that is clear. While hacking HSQL and HaskellDB I ran into this  
problem all the time, so I usually did clean/configure/build/haddock/ 
install all the time, which is no fun on one package let alone the 6  
or so in that chain. Also there was no way to be sure that I'd  
recompiled them in the right order. For a release I expect the  
versioning takes care of that.

Actually, how about a command that does all that in one go? Something  

runghc Setup buildAll <configure options>

(I'm not proposing you fix things in the way I suggest, just that you  
provide a mechanism for doing this sort of thing directly in Cabal.)

>> So, to say that another way, the message provides both insufficient
>> and unnecessary advice, but I think it can be improved.
> How about just re-running configure if we think it's necessary, and
> using the previous configuration flags?

I think it best that you *don't* do that for a usual "build", but if  
we're using something like "buildAll" then perhaps. A flag - "go ahead  
and generally clobber things as you see best" - might be handy for  
developers too. I for one would prefer to wait a bit longer if I'm  
guaranteed I'll get something useable (i.e. none of these issues) at  
the end of the process.

Sorry if this is well-worn ground. I'm quite surprised how well Cabal  
works at the end-user stage, and I guess my complaints are really  
levelled at GHC's dependency tracking, which makes hacking less safe  
than I'd like.


More information about the cabal-devel mailing list