This is the main tool to manage Ciao source code, in order to automatize the configuration, build, (un)installation, packaging, and cleaning (removal of object files) of complex collections of code.


A bundle is the term used in Ciao for a collection of related modules (software package or component, do not confuse with packages as libraries). Bundles can be distributed and installed separatelly (and they may depend on other bundles).

Modules allow programs to be separated and combined in a flexible way. However, modules alone are not enough to describe large libraries and applications. For example, many definitions concerning module alias paths, compilation options, documentation, licensing, authorship, etc. are usually global for a collection of modules. Moreover, applications often depend on external tools and data files whose dependencies cannot be easly specified.

A bundle (see note below) is the equivalent in Ciao of both a source project and specification of a software package. It usually comprises:

  • source code (as modules and packages)
  • module alias paths
  • dependencies to other bundles
  • documentation (in LPdoc or other formats).
  • custom code for build/installation
  • at least one file that describes this meta-information

Declaring those definitions separately from the source code that is compiled is in general safer and easier than other lower-level solutions (like defining file_search_path/2 dynamically, which may lead to inconsistent incremental compilations if not done right).

Note: when talking about Ciao programs, we will avoid the term package as a collection of software, in order to avoid confusion with packages as language extensions for Ciao.

Packaged Bundles

A pbundle, or packaged bundle, is any of the possible packaged (ready to be distributed) versions of a bundle. You can think of them as the equivalent of biological vectors for bundles.

A pbundle may include source code, pre-compiled binaries for specific architectures, and installers for different operating systems. It may deliver a whole bundle, a combination of them, or parts (e.g., just manuals).