Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A command line tool to generate Gentoo ebuilds from Hackage packages.

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 Merge Merge/Dependencies.hs: removed unused 'intersection' and 'difference' April 17, 2014
Octocat-spinner-32 Portage Portage/Cabal.hs: drop unused version simplification April 18, 2014
Octocat-spinner-32 cabal @ 67ff6d8 cabal: rebase against current upstream December 28, 2013
Octocat-spinner-32 tests Change Dependency type to make builder simpler. April 15, 2014
Octocat-spinner-32 .gitignore correct cabal-flags support February 24, 2013
Octocat-spinner-32 .gitmodules move 'cabal' repo out of this git repo (Nensha's idea and implementat… July 02, 2012
Octocat-spinner-32 AnsiColor.hs Wall police March 15, 2008
Octocat-spinner-32 Cabal2Ebuild.hs Change Dependency type to make builder simpler. April 15, 2014
Octocat-spinner-32 CacheFile.hs Put the cache file in subdir .hackport July 29, 2007
Octocat-spinner-32 Diff.hs port to (bundled) Cabal-1.12 October 06, 2011
Octocat-spinner-32 DistroMap.hs QA - prune some warnings September 17, 2013
Octocat-spinner-32 Error.hs Try to be clearer with error message about -p overlay. March 05, 2011
Octocat-spinner-32 Hackage.hs cleanup: factor out Main.defaultRepo{,URI} to separate Hackage file February 26, 2012
Octocat-spinner-32 LICENSE hackport is GPL, so add the GPL license May 23, 2010
Octocat-spinner-32 Main-GuessGHC.hs guess-ghc-version: Integrate GHC guessing into 'hackport merge' July 28, 2010
Octocat-spinner-32 Main.hs Main.hs: cleanup: store cabal flags as 'Maybe String' instead of 'Str… January 03, 2014
Octocat-spinner-32 Merge.hs Portage/GHCCore.hs: drop unused defaultGHC April 05, 2014
Octocat-spinner-32 Overlays.hs Overlays.hs mapM -> mapM_ (unused result on -Werror) December 20, 2009
Octocat-spinner-32 Progress.hs fix typo December 17, 2009
Octocat-spinner-32 README.rst README.rst: update 'hackport make-ebuild' description (noticed by gnoi) March 26, 2012
Octocat-spinner-32 Setup.hs Remove other non-hackport stuff and move files to root July 29, 2007
Octocat-spinner-32 Status.hs Status.hs: don't leak halfopen files September 13, 2013
Octocat-spinner-32 TODO TODO: drop finished items December 01, 2012
Octocat-spinner-32 Util.hs Main.hs: add support for forcing certain flags in .cabal file January 01, 2014
Octocat-spinner-32 hackport.cabal Create a table of subslot changing functions. April 15, 2014
Octocat-spinner-32 mk_release_tarball.bash mk_release_tarball.bash: force removal (read-only files need user's a… January 07, 2014



Hackport is a utility application for Gentoo Linux to ease the tasks for the Haskell Project.

The main purpose for Hackport is to interact with Hackage and create Ebuilds from Cabal packages. It also does handy functions to compare hackage, the overlay and the portage tree.

Quick start

  1. Build hackport binary by hand (or install it from haskell overlay).
  2. Setup hackport database into overlay you plan to merge new ebuilds:
$ mkdir ~/overlays
$ cd ~/overlays
$ git clone git://
$ cd gentoo-haskell
$ hackport update
$ ls -1 .hackport/
  1. Add your ~/overlays/gentoo-haskell to PORTDIR_OVERLAY in /etc/make.conf.

Done! Now you can hackport merge <package-name> to get an ebuild merged to your overlay!


'hackport update'
Update the local copy of hackage's package list. You should run this every once in a while to get a more recent copy.
'hackport list [FILTER]'
Print packages from hackage, with an optional substring matching.
'hackport merge <package>'

Create a Gentoo Linux Ebuild for hackage package named <package>. The category defaults to dev-haskell, but is overridden if an older version has been merged previously to another category. The category can also be overridden with the syntax category/package. Example:

$ hackport merge x11-wm/xmonad

Hackport will make an ebuild that uses the haskell-cabal eclass, and set the following properties:

PN (package name)
Package name converted into lower case
PV (package version)
Package version with tags dropped.
Defaults to ~amd64 ~x86
Set to "bin" for executables, and "lib haddock profile" for libraries. Packages that contains both a binary and library will get the union.
GHC dependency defaults to >=dev-lang/ghc-6.6.1. Cabal dependency is fetched from Cabal field 'Cabal-Version'. All other package dependencies are converted into gentoo syntax. Range dependencies are flattened and usually needs manual tweaking.
From Synopsis if it is non-empty, otherwise Description.
From Homepage
From package url
From cabal license converted into gentoo licenses
Defaults to "0"
'hackport diff [missing|additions|newer|common]'

Prints a list showing a diff between hackage and the overlay. For each package it shows the latest version in both hackage and the overlay.

Optional parameters:
'all', the default action
List all packages.
List packages that exist in hackage but not in the overlay, or where the hackage version is more recent.
List packages only in the overlay, or where the overlay has a more recent version.
List packages where hackage has a more recent version.
List packages where hackage and the overlay has the same version.
'hackport status [toportage]'

Provides an overview comparing the overlay to the portage tree. It will teel you, for each package and version, if the package exist

  • only in the portage tree

  • only in the overlay

  • both in the portage tree and the overlay

  • both in the portage tree and the overlay,

    but the ebuilds are not identical

Optional parameters:

Only print packages that are likely to be interesting to move to the portage tree. It will print packages when they exist in both portage and the overlay, and:

System Message: ERROR/3 (<string>, line 121)

Unexpected indentation.
  • the ebuilds differ, or
  • the overlay has a more recent version
'hackport make-ebuild <category> <path/to/package.cabal>'
Generates standalone .ebuild file from .cabal spec and stores result to the overlay into <category>/<package> Option is useful for not-on-hackage packages and for debug purposes.

Henning Günther Duncan Coutts Lennart Kolmodin
Something went wrong with that request. Please try again.