Do Anything Now
dan is a build system inspired from GNU make, cmake, meson, ... but only in python.
It is mostly designed to be easy to use, it comes with its vscode extension available on the marketplace.
It also provide a packaging system called dan.io, that will fetch and build 3rd party libraries.
dan is available on pip:
pip install dan-build
Generators are python functions that generates an output:
from dan import generator
@generator(output='hello.txt', dependencies=['source.jinja'])
def hello(self):
env = jinja2.Environment(loader=jinja2.FileSystemLoader(self.source_path))
template = env.get_template('source.jinja')
print(template.render({'data': 'hello'}), file=open(self.output, 'w'))
They can be async:
@generator(output='hello-cpy.txt', dependencies=[hello])
async def hello_cpy(self):
assert hello.up_to_date
async with aiofiles.open(hello.output, 'r') as src:
async with aiofiles.open(self.output, 'w') as dst:
await dst.write(await src.read())
from dan.cxx import Library, Executable
class MyLib(Library):
name = 'my-lib'
sources = ['src/my-lib.cpp']
public_includes = ['include']
class MyExe(Executable):
name = 'my-exe'
sources = ['src/main.cpp']
dependencies = [MyLib]
dan.io is the main (default) package source repository (custom repositories are supported by editting ~/.dan/repositories.json), documentation comming soon.
class MyExe(Executable):
name = 'my-exe'
sources = ['src/main.cpp']
dependencies = ['boost:headers@dan.io >= 1.82']
dan
is the main executable to build your project, it can build, test, list targets/test, ...
dan --help
Usage: dan [OPTIONS] COMMAND [ARGS]...
Options:
--version Show the version and exit.
-q, --quiet Dont print informations (errors only)
-v, --verbose Pring debug informations
-j, --jobs INTEGER Maximum jobs
--help Show this message and exit.
Commands:
build Build targets
clean Clean generated stuff
code VS-Code specific commands
configure Configure dan project
install Install targets
ls Inspect stuff
run Run executable(s)
scan-toolchains Scan system toolchains
test Run tests
uninstall Uninstall previous installation
dan scan-toolchains [-s <env-script>]
dan configure [-B <build_path>] [-S <source_path>] [-t <toolchain>] [-s <setting>=<value>] [-o <option>=<value>]
dan build [-B <build_path>] [-v] [--for-install] [TARGETS]...
Install targets marked with install = True
property to the install.destination setting.
dan install [-B <build_path>] [TARGETS]... [user|dev]
Settings:
- install.destination: The install destination (default: /usr/local).
- install.runtime_prefix: Executables installation prefix (default: bin).
- install.libraries_prefix: Libraries installation prefix (default: lib).
- install.includes_prefix: Includes installation prefix (default: include).
- install.data_prefix: Data files installation prefix (default: share).
- install.project_prefix: !!! NOT USED YET !!! Project prefix (default: None).
dan-io
is a secondary utility to interract with package management system.
$ dan-io --help
Usage: dan-io [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
ls Inspect stuff
search Search for NAME in repositories
$ dan-io ls --help
Usage: dan-io ls [OPTIONS] COMMAND [ARGS]...
Inspect stuff
Options:
--help Show this message and exit.
Commands:
libraries List available libraries
repositories List available repositories
versions Get LIBRARY's available versions
bash and zsh completions are currently supported:
-
bash:
for script in ~/.local/etc/bash_completion.d/*.sh; do source ${script} done
-
ksh:
for script in ~/.local/etc/ksh_completion.d/*.sh; do source ${script} done