CABAL-MODULE(5)

πŸ“¦ in nixpkgs unstable

okay bestie, welcome to CABAL-MODULE(5) from the File Formats Manual β€” it’s giving β€œhow do I build Haskell stuff in the ports(7) tree without losing my mind” energy, and honestly? iconic.

✨ 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.

It 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. 🫢

The module parameters are:

  • 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 currently adds no make(1) targets. periodt. πŸ’…

🧚 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 the 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)


mwah πŸ’‹ β€” this page is brought to you by Debian, dated August 16, 2025. slay.

πŸ“¦ where this page comes from