DUNECONTROL(1)

πŸ“¦
version 2.11.0 Β· 4 versions
, in ubuntu resolute, ubuntu stonking

πŸ¦‹ dunecontrol(1) πŸ¦‹

okay bestie, you just opened a page from the General Commands Manual, and it's giving main-character build-system energy. sit down, hydrate, let's go. πŸ’–


🌸 NAME 🌸

dunecontrol β€” the control program for the build system of the Dune libraries. that's the whole job description, and she ate. πŸ’…


✨ SYNOPSIS ✨

dunecontrol [OPTIONS] COMMANDS [COMMAND-OPTIONS]

like, options first, then the commands, then command-options. order matters, no cap. πŸŽ€


πŸ’œ DESCRIPTION πŸ’œ

okay so. the Dune libraries are not one big blob β€” they're a set of modules, and each one can be built all on its own with CMake. independent queens. πŸ‘‘

BUT. and this is the plot twist β€” the modules have dependencies on each other, and those dependencies are expected to form a directed acyclic graph. no loops, no drama, just vibes flowing in one direction. πŸ¦‹

and where do these dependencies live? in a file called dune.module, chillin' in the main directory of every single Dune module. that's the receipts file.

so what does dunecontrol actually do for you? it helps you build sets of inter-dependent modules. it can:

  • construct the entire dependency graph for you, and hand you info about it πŸ”
  • then run a bunch of build-related commands across all the modules

and here's the iconic part β€” those commands get executed in the order that the dependency graph demands. the graph is the group chat admin. you don't argue with the graph. periodt. ✨


πŸŽ€ COMMANDS πŸŽ€

it's a colon-separated list of commands, so you can stack them like a little playlist. available commands are:

  • help β€” show a help message and dip out (exit). 🫢
  • print β€” print the list of modules, sorted according to their dependency relations. the graph, but make it a list. πŸ“œ
  • info β€” same as print, but it also tells you whether each thing is a dependency or a suggestion. receipts included. 🧾
  • printdeps β€” print the recursive dependencies of a module. yes, all the way down. πŸ•³οΈ
  • vcsetup β€” set up your version control repository (Git etc.) or working copy (SVN). gotta secure the source. πŸ”
  • update β€” update all modules from the repository, each via its own respective version control system. glow-up from upstream. 🌈
  • configure β€” run cmake for each module. βš™οΈ
  • make β€” run make for each module. πŸ”¨
  • all β€” run the configure and make commands for each module. the combo meal. πŸ“
  • exec β€” execute an arbitrary command in each module source directory. go wild. πŸ’«
  • bexec β€” execute an arbitrary command in each module build directory. (b is for build, iykyk) 🧚
  • status β€” show version control status for each module. who's dirty, who's clean. πŸ’…
  • svn β€” run an svn command for each svn-managed module. 🐒
  • git β€” run a git command for each git-managed module. πŸ™
  • export β€” run eval `dunecontrol export` to save the list of dune.module files to the DUNE_CONTROL_PATH variable. very meta, very iconic. ✨

πŸ’– OPTIONS πŸ’–

  • -h, --help β€” show this help. the classic. πŸ™ˆ
  • --debug β€” run with debugging output enabled. turn the lights on. πŸ”
  • --module=mod β€” apply the actions on module mod and all the modules it depends on. bring the whole friend group. πŸ«‚
  • --only=mod β€” only apply the actions on module mod, but not on the modules it depends on. solo mission, no plus-ones. πŸ’…
  • --current β€” only apply the actions on the current module, the one whose source tree we are in. rn. right here. πŸ“
  • --current-dep β€” apply the actions on the current module, and all the modules it depends on. πŸ“βž•πŸ«‚
  • --resume β€” resume a previous run β€” only consider the modules that were not built successfully on the previous run. second attempt, better attitude. πŸ”
  • --skipfirst β€” skip the first module. (use with --resume) πŸ™ˆ
  • --skipversioncheck β€” when looking for Dune modules, do not check whether they have the required versions. living dangerously, love that for you. πŸ’€
  • --opts=file β€” load default options from file; for details see the section below. πŸ‘€
    • instead of a command line parameter, it is also possible to define an environment variable DUNE_OPTS_FILE. 🌸
  • --builddir=name β€” make out-of-source builds in a subdir name. πŸ“
    • if name is a relative path, this directory is created inside each module.
    • if it is an absolute path, a subdirectory for each module is created inside.
    • instead of a command line parameter, it is also possible to define an environment variable DUNE_BUILDDIR (see below) or to specify a BUILDDIR variable in the opts file. ✨
  • --[COMMAND]-opts=opts β€” set options for COMMAND (this is mainly useful for the all COMMAND). 🎯

πŸ“ OPTS FILE πŸ“

the options file holds a bunch of different entries that specify your build environment β€” like which compiler to use, which options to pass to cmake, where to build DUNE, etc. your whole setup, one file.

variables are:

  • DUNE_CONTROL_PATH β€” just as the environment variable DUNE_CONTROL_PATH, it is possible to define it in the options file. for details see the description below. πŸ‘‡
  • BUILDDIR=name β€” to specify the build directory, just as via the command line. defining the build directory in the opts file allows you to easily switch between different build directories for different DUNE configurations. lowkey a game changer. πŸŽ€
  • [COMMAND]_FLAGS=opts β€” set options for a specific COMMAND. in the case of the CMAKE command, e.g., this might look like:
CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_CXX_FLAGS='-fPIC -g -O3' -DFOO_PREFIX=/path/to/libfoo"

in case of the MAKE command, a common use is to enable concurrency:

MAKE_FLAGS="-j4"

see? parallel build energy. πŸ”₯


🌈 ENVIRONMENT VARIABLES 🌈

  • DUNE_CONTROL_PATH β€” a colon-separated list that specifies where dunecontrol searches for Dune modules. entries are either directories, which are then used recursively for dune.module files, or the user can directly specify the full path to specific dune.module files. πŸ”Ž
    • default: the default for the case that DUNE_CONTROL_PATH is empty is to search the current directory, its subdirectories, and a system-wide installation in /usr. 🐧
  • DUNE_OPTS_FILE β€” specify a default value for an options file, if the user does not specify the --opts= parameter on the commandline. πŸ—‚οΈ
  • DUNE_BUILDIR β€” specify a default value for a build directory, if the user does not specify the --builddir= parameter on the commandline. πŸ—οΈ
heads up bestie: that last one is spelled exactly DUNE_BUILDIR in this manual. we don't make the rules, we just document them faithfully. πŸ’…

🫢 AUTHOR 🫢

Dune was written by the Dune team (https://www.dune-project.org/community/people). legends, honestly. πŸ‘‘

This manual page was written by Oliver Sander and Christian Engwer. ✨


Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.


and that's the whole page, babe. this one's from January 5, 2026, it's DUNECONTROL(1), and you now know her better than she knows herself. go build something gorgeous. πŸ¦‹πŸ’–βœ¨

πŸ“¦ where this page comes from