Personal tools

Creating Debian packages from Cabal package

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(I was bitten.)
(Separating packaging of libraries and programs (no info on the latter though), and some beautification)
Line 1: Line 1:
== Packaging a Cabal package in 10 easy steps ==
+
== Packaging a Cabal library package in 10 easy steps ==
   
 
''This process requires the <tt>haskell-utils</tt> package.''
 
''This process requires the <tt>haskell-utils</tt> package.''
   
Here is an example on was created a new Debian package out of an Haskell [[Cabal]] package: [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mtl-1.0 mtl].
+
Here is an example on was created a new Debian package out of an Haskell [[Cabal]] library package: [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mtl-1.0 mtl].
   
1. <tt>wget http://hackage.haskell.org/packages/archive/mtl/1.0/mtl-1.0.tar.gz -O haskell-mtl_1.0.1.orig.tar.gz</tt>
+
<ol>
+
<li><tt>wget http://hackage.haskell.org/packages/archive/mtl/1.0/mtl-1.0.tar.gz -O haskell-mtl_1.0.1.orig.tar.gz</tt></li>
2. <tt>tar -zxf haskell-mtl_1.0.1.orig.tar.gz</tt>
+
<li><tt>tar -zxf haskell-mtl_1.0.1.orig.tar.gz</tt></li>
+
<li><tt>cd mtl-1.0</tt>`</li>
3. <tt>cd mtl-1.0</tt>`
+
<li><tt>mkdir -p debian/varfiles</tt></li>
+
<li>Create <tt>debian/varfiles/varfile</tt> with your favorite editor:
4. <tt>mkdir -p debian/varfiles</tt>
+
<pre> maintainer="Ian Lynagh (wibble) <igloo@debian.org>"
+
short_description="Haskell monad transformer library for GHC"
5. Create <tt>debian/varfiles/varfile</tt> with your favorite editor:
+
long_description=" MTL is a monad transformer library, inspired by the paper \"Functional
<pre>maintainer="Ian Lynagh (wibble) <igloo@debian.org>"
+
Programming with Overloading and Higher-Order Polymorphism\",
short_description="Haskell monad transformer library for GHC"
+
by Mark P Jones (<http://www.cse.ogi.edu/~mpj/>), Advanced School
long_description=" MTL is a monad transformer library, inspired by the paper \"Functional
+
of Functional Programming, 1995."
Programming with Overloading and Higher-Order Polymorphism\",
+
c_dev_libs=""
by Mark P Jones (<http://www.cse.ogi.edu/~mpj/>), Advanced School
+
extra_build_deps=""</pre>
of Functional Programming, 1995."
+
(Pay attention to the leading space in <tt>long_description</tt>. It's necessary due to the format of Debian's <tt>control</tt> file.)</li>
c_dev_libs=""
+
<li>Create <tt>debian/copyright</tt> with your favorite editor:
extra_build_deps=""
+
<pre> Debianised by ...
</pre>
+
Author ...
+
Copyright: BSD ... /usr/share/common-licenses/BSD ...
(Pay attention to the leading space in <tt>long_description</tt>. It's necessary due to the format of Debian's <tt>control</tt> file.)
+
EOF</pre></li>
+
<li><tt>dch --create -D unstable --package haskell-mtl --newversion 1.0.1-1</tt></li>
6. Create <tt>debian/copyright</tt> with your favorite editor:
+
<li><tt>update-debian-haskell-files</tt></li>
<pre>
+
<li><tt>debian/rules update-generated-files</tt></li>
Debianised by ...
+
<li><tt>debuild -us -uc</tt></li>
Author ...
+
</ol>
Copyright: BSD ... /usr/share/common-licenses/BSD ...
 
EOF
 
</pre>
 
 
7. <tt>dch --create -D unstable --package haskell-mtl --newversion 1.0.1-1</tt>
 
 
8. <tt>update-debian-haskell-files</tt>
 
 
9. <tt>debian/rules update-generated-files</tt>
 
 
10. <tt>debuild -us -uc</tt>
 
   
 
With luck the <tt>.cabal</tt> file will provide most of the text for steps 5 and 6.
 
With luck the <tt>.cabal</tt> file will provide most of the text for steps 5 and 6.
Line 38: Line 38:
   
 
Please subscribe to the [http://urchin.earth.li/mailman/listinfo/debian-haskell debian-haskell] mailling-list if you are interested in creating new Haskell packages for Debian.
 
Please subscribe to the [http://urchin.earth.li/mailman/listinfo/debian-haskell debian-haskell] mailling-list if you are interested in creating new Haskell packages for Debian.
  +
  +
== Packaging a Cabal program package in N easy steps ==
  +
  +
TBD

Revision as of 07:02, 1 April 2008

1 Packaging a Cabal library package in 10 easy steps

This process requires the haskell-utils package.

Here is an example on was created a new Debian package out of an Haskell Cabal library package: mtl.

  1. wget http://hackage.haskell.org/packages/archive/mtl/1.0/mtl-1.0.tar.gz -O haskell-mtl_1.0.1.orig.tar.gz
  2. tar -zxf haskell-mtl_1.0.1.orig.tar.gz
  3. cd mtl-1.0`
  4. mkdir -p debian/varfiles
  5. Create debian/varfiles/varfile with your favorite editor:
        maintainer="Ian Lynagh (wibble) <igloo@debian.org>"
        short_description="Haskell monad transformer library for GHC"
        long_description=" MTL is a monad transformer library, inspired by the paper \"Functional
        Programming with Overloading and Higher-Order Polymorphism\",
        by Mark P Jones (<http://www.cse.ogi.edu/~mpj/>), Advanced School
        of Functional Programming, 1995."
        c_dev_libs=""
        extra_build_deps=""
    (Pay attention to the leading space in long_description. It's necessary due to the format of Debian's control file.)
  6. Create debian/copyright with your favorite editor:
        Debianised by ...
        Author ...
        Copyright: BSD ... /usr/share/common-licenses/BSD ...
        EOF
  7. dch --create -D unstable --package haskell-mtl --newversion 1.0.1-1
  8. update-debian-haskell-files
  9. debian/rules update-generated-files
  10. debuild -us -uc

With luck the .cabal file will provide most of the text for steps 5 and 6.

When making future changes, apart from adding a changelog entry (use dch), only steps 9 and 10 need to be repeated.

Even if packaging Haskell libraries seems easy, the Debian Policy and the Developers Reference contains a lot of valuable informations on how to create a policy compliant Debian package.

Please subscribe to the debian-haskell mailling-list if you are interested in creating new Haskell packages for Debian.

2 Packaging a Cabal program package in N easy steps

TBD