CABAL-MODULE(5) | File Formats Manual | CABAL-MODULE(5)

# NAME

`cabal-module` — devel/cabal port module for building Haskell programs

# DESCRIPTION

This manual page documents the behavior of setting `MODULES=devel/cabal` in the ports(7) tree.

Uses cabal(1) to automate packaging Haskell binary projects. During `fetch`, the dependent packages enumerated in `MODCABAL_MANIFEST` are downloaded into the hackage subdirectory of `DIST_SUBDIR`. During `post-extract`, the dependency sources are unpacked into `WORKDIR`. Special care is taken to replace .cabal files if they are updated post-release on hackage. A custom cabal.project.local file gets created to direct cabal(1) to the extracted packages and prevent any network interaction. In rare cases a custom cabal.project is required. This module automatically copies such files from port's files into `WRKSRC`. During `build`, cabal(1) is invoked to build the executables listed in `MODCABAL_EXECUTABLES`.

lang/ghc and devel/cabal-install are added to `BUILD_DEPENDS`. This module uses `SITES.hs` to download the sources from hackage.

This module parameters:

MODCABAL_STEM
  Name of the package on hackage (required).
MODCABAL_VERSION
  Version of the package (required).
MODCABAL_MANIFEST
  Hackage dependencies required by this package, see below.
MODCABAL_DATA_DIR
  data-dir from .cabal file (if executable needs this)
MODCABAL_REVISION
  Numeric revision of .cabal file on hackage if one is needed on top of .cabal file contained in the .tar.gz file.
MODCABAL_BUILD_ARGS
  passed to cabal v2-build
MODCABAL_FLAGS
  custom feature `--flags` for cabal(1).
MODCABAL_EXECUTABLES
  Executable target in .cabal file, defaults to hackage package name in `MODCABAL_STEM`.

This module adds currently adds no make(1) targets.

# DEPENDENCY MANIFEST

Hackage dependencies are listed in `MODCABAL_MANIFEST` as space separate triples of package version revision. They correspond to the main package values of `MODCABAL_STEM` `MODCABAL_VERSION` `MODCABAL_REVISION`.

The contents of `MODCABAL_MANIFEST` is normally generated by devel/cabal-bundler which creates a working build plan from hackage dependency information.

# EXAMPLES

To create a new Haskell binary port one would install cabal-bundler port, look up the chosen package version number on hackage. E.g.

$ `cabal-bundler` `--openbsd` cpphs-1.20

# SEE ALSO

cabal(1), port-modules(5)

August 16, 2025 | Debian