DUNECONTROL(1)
π¦ 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 asprint, 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 theconfigureandmakecommands 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β runeval `dunecontrol export`to save the list ofdune.modulefiles to theDUNE_CONTROL_PATHvariable. 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. πΈ
- instead of a command line parameter, it is also possible to define an environment variable
--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 aBUILDDIRvariable in the opts file. β¨
--[COMMAND]-opts=optsβ set options for COMMAND (this is mainly useful for theallCOMMAND). π―
π 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 variableDUNE_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 wheredunecontrolsearches for Dune modules. entries are either directories, which are then used recursively fordune.modulefiles, or the user can directly specify the full path to specificdune.modulefiles. π- default: the default for the case that
DUNE_CONTROL_PATHis empty is to search the current directory, its subdirectories, and a system-wide installation in/usr. π§
- default: the default for the case that
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. β¨
π COPYRIGHT π
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
- ubuntu resolute: libdune-common-dev 2.11.0-1 Β· GPL-2.0-only WITH DUNE exception
- ubuntu stonking: libdune-common-dev 2.11.0-1 Β· GPL-2.0-only WITH DUNE exception
- π the page's license: FSFAP
- Copyright Β© 2013-2015 Oliver Sander
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms