<div dir="ltr"><div>I have some ideas about how to improve the bootstrap.sh situation.</div><div><br></div><div>Rewriting in haskell sounds like a good idea to avoid the shell script</div><div>mess.</div><div><br></div><div>Simplify the bootstrap.sh process:</div><div><br></div><div>* always use a fixed set of versions of packages for the dependencies</div><div>* always bootstrap in a sandbox, and ignore packages in the global and</div><div>  user package database - only reuse an existing package if it is in</div><div>  the bootstrap sandbox and is the exact version expected</div><div>* possibly the set of versions of packages can be in an external file,</div><div>  and possibly bootstrap can optionally try to download a new</div><div>  dependencies version file when bootstrap.sh is run</div><div>* possibly the set of dependency package versions can be different for</div><div>  different versions of ghc</div><div><div>* there could even be a process which uses a cabal-install to generate</div><div>  the list of bootstrap.sh dependency versions in some automatic way</div><div>* choose the bootstrap to always do shared or non shared (not sure<br></div></div><div>  which is best). Don't have options to do profiling, haddock, change</div><div>  the prefix, etc. at all.</div><div><div><div>* if any dependency packages need specific flags, then this can be</div><div>  hardcoded in some way linked to in the dependency package versions</div></div></div><div><br></div><div>This allows more reliable bootstrapping on a new system, and more</div><div>reliable bootstrapping e.g. if you delete the cabal-install binary and</div><div>also happen to have all sorts of stuff in your user package database.</div><div><br></div><div>In this system, if you want the latest cabal-install and you want it</div><div>with the latest packages, or with profiling, haddock, etc. then you</div><div>can just bootstrap.sh, then use the cabal-install binary to build a</div><div>latest and greatest cabal-install with the full constraint solver and</div><div>any options you want. I think this is a reasonable compromise to allow</div><div>easy maintenance and a reliable and painless bootstrap.sh process.</div><div><br></div><div>I can work on some variation of this if it sounds acceptable.</div></div>