Re: [Haskell-cafe] writing a good Setup.hs is *hard* (was: broken on install encoding 0.6.6)

Ccing cabal-dev.
On Aug 17, 2011 9:12 AM, "Rogan Creswick"
On Wed, Aug 17, 2011 at 6:29 AM, Gang
wrote: sorry to bother
Not in the least!
I was trying to figure out what problem you were encountering, and I learned a lot. I never did recreate your problem, but in the process I ran into a whole host of other annoyances and strange situations relating to slightly broken cabal files and cabal build intricacies that confound our existing tools.
I don't mean to pick on encoding or HaXml - I've seen the same kinds of issues in many, many Haskell packages (including most of the packages I've written myself) these are just the ones I ran into today. (and I am quite serious when I say that writing a good Setup.hs is very, very, difficult). My objective is just to motivate a minor change to cabal that would help to make this easier.
On to the build problems:
encoding-0.6.6 uses it's own source during the build process! It actually has to be partially compiled before the build tool can build encoding (!). I'm *amazed* that this actually works at all (impressed, too), and indeed, it doesn't work with cabal-dev, which is unfortunate: cabal-dev would have identified one of the dependency issues in HaXml 1.19 (pretty is an undocumented dependency, although I am unsure if that was true at the time 1.19 and encoding-0.6.6 were released. I haven't tracked the pretty dependency down to the exact source - it could be a transitive dep introduced by a recent version of something HaXml 1.19 needs. Per my subject line - this is amazingly difficult - keep in mind that we're not talking about building *packages*, this is just to build the *build tool*, and none of this is documented. How long before it is effectively impossible to recreate the circumstances that result in a successful encoding-0.6.6 build?).
cabal-dev can't build encoding-0.6.6 because the encoding source that is referenced from encoding's Setup.hs depends on (at least) HaXml >= 1.19 && < 1.22.5; this is OK with cabal, since cabal-install installs a necessary HaXml into your user package db prior to building encoding's Setup.hs (modulo the missing upper version bound). Therefore HaXml "just happens" to be visible when cabal builds Setup.hs -- a build step that cabal-dev isn't capable of controlling (and probably never will be -- we could intercept system calls, but that's difficult when only supporting one OS, much less three).
You can, of course, manually install HaXml to your local package db and then cabal-dev install encodings, but that's somewhat of a hack (and you'll find that the current HaXml won't work for the current encodings release, as Gang Yu did).
Adding a section to the cabal file that specifies build dependencies for Setup.hs would make some very important parts of this process obvious - and it would *greatly* assist in debugging failing builds, not to mention allowing us to make use of the extensive libraries on hackage to write more expressive build systems. (We could actually use openshake in Setup.hs, once it's released, for example!)
I've floated the idea past a number of Haskell programmers with positive responses, and there is a GSOC ticket that provides some more details (the project was not selected - no students proposed to work on it):
http://hackage.haskell.org/trac/summer-of-code/ticket/1602
--Rogan
Regards Gang On 08/17/2011 04:59 PM, Gang Yu wrote:
hi, cafe:
I go through to the encoding package installation problem again.
cabal install encoding Resolving dependencies... /tmp/encoding-0.6.68093/encoding-0.6.6/dist/setup/setup: 4: Syntax
error:
";" unexpected
when I have a check on the this issue, I get:
file ~/.cabal/packages/ hackage.haskell.org/encoding/0.6.6/encoding-0.6.6/dist/setup/setup /home/gang/.cabal/packages/ hackage.haskell.org/encoding/0.6.6/encoding-0.6.6/dist/setup/setup: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, not stripped
My machine is:
gang@gang-laptop:~$ uname -a Linux gang-laptop 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux
is this related? How can I manually install the package from scratch? Any helps or directs will be appreciated
Thanks Gang
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (1)
-
Antoine Latter