Cabal feedback notes
gk at ninebynine.org
Fri Oct 22 10:59:37 EDT 2004
I'm having a shot at packaging my revision of the HaXml library using
Cabal, using  as reference:
I'm basically stuck at the point of bootstrapping Cabal into my system (see
point 9 towards the end, below). I'm proceeding on the basis of using
Windows and Hugs. I *could* use GHC, but for non-Haskellers I think Hugs
represents the easiest path of entry into using Haskell software, so I'd
like to persist with that.
There are some random notes jotted down as I progress.
1. Section 1.2 example of Setup.description has field Exposed-modules, but
section 4.1 described field "Modules". Which is correct?
[Later, I see both are defined. The relationship could usefully be
2. At this stage, it's not clear if I should include full hierarchical
package names, or just list packages relative to the working
directory. I'm assuming the latter.
3. I've collected my list of exported modules by copying imports statements
from the unit test program.
4. Copyright: this isn't a pure Cabal question: how does one indicate the
copyright of a package that have been heavily extended like my version of
HaXml. The original Copyright should be respected, but there's a lot of
new code too. Can I use multiple Copyright fields?
5. The Setup.description file doesn't appear to have provision for a
free-form description of the package. Suggest 'Description:', e.g.:
This HaXml-I package is a derivative of the HaXml package
maintained by Malcolm Wallace, with a number of enhancements:
- support for XML namespaces, xml:lang and xml:base
- passes a significant number of W3C conformance tests
- support for Unicode UTF-8 and UTF-16 character encodings
- redesigned external entity support, including support for
HTTP access to external entities.
(A Wiki-like format would be handy here; now wasn't someone working on that?)
6. Description file comments: is the '--' required to start at column
1? I think this should be 'yes', given the leading-space sensitive nature
of the header field format.
7. I'm uneasy about the prohibition against completely empty lines in the
Setup.description file. I guess this is following RFC2822/MIME, right? I
see a mismatch here with my suggested "Description:" field, and am not sure
which should hold sway.
8. Setup.lhs. Following the example in section 1.2, is it intended that
Hugs will always used to run the installation. I.e. Hugs must be
installed? I like the runhaskell idea better. I guess we just need to
work through this to figure out how things work in the various environments.
For my Windows system, for the time being I've taken the simple expedient
of placing a file "RunHaskell.bat" in a directory on the Path:
C:\DEV\Hugs98\runhugs-20040109.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
(There are probably better/neater ways to achieve this goal, but I like
using batch/script files in this way, as it makes the actual location of
the actual program files used very transparent.)
9. At this point, I get stuck. How am I supposed to bootstrap Cabal?
I tried unzipping the Cabal distribution, switching to the Cabal directory,
runhugs: Error occurred
Reading file "Setup.lhs":
Reading file ".\Distribution\Simple.hs":
ERROR ".\Distribution\Simple.hs":52 - Syntax error in module definition
ted selector "#ifdef")
There seems to be a kind of "Catch-22" problem here: how to get Cabal
installed without Cabal first being installed.
10. I'll repeat here a comment made on the list. I think there should be
an option in the Setup.description file to specify what file extensions are
to be passed through the hscpp (or whatever) program.
11. If Cabal does not ship with hscpp for performing all preprocessing, I'd
suggest having a point of indirection (like "runhaskell") so that systems
without cpp but with hscpp can be set up to invoke this.
I think that's as much as I can usefully do at this stage. If anyone has
any further suggestions I'm willing to try them out.
More information about the Libraries