code
— Tools for checking out and building code
This submodule contains a few useful tasks for checking out, configuring, and building arbitrary code.
The CheckoutTask
task class checks out a version-controlled
repository. For the moment, only git
repositories are supported. The path
to the git
executable may be specified through the CheckoutTask.GIT
class variable.
Todo
Implement svn
and cvs
checkout; copy
checkout (i.e. copy a
directory from somewhere) may also be useful.
The BuildTask
task class builds code from a given source directory. A
build directory must also be specified and will be created if necessary. For
the moment, BuildTask
only supports ` cmake
builds, but there are
plans to add support for autoconf
/configure
/make
builds. The path
to the cmake
executable may be specified through the
BuildTask.CMAKE
class variable.
Todo
Implement autoconf
/configure
/make
builds.
To describe the usage of CheckoutTask
and BuildTask
, let us
assume that repo_dir
contains a git
repository with a CMake project.
We use a temporary directory work_dir
for our test:
>>> checkout_dir = work_dir / 'checkout'
>>> build_dir = work_dir / 'build'
>>> log_dir = work_dir / 'log'
Now we can build checkout and build tasks for this repository:
>>> from valjean.cosette.code import CheckoutTask, BuildTask
>>> from pprint import pprint
>>> ct = CheckoutTask(name='project_checkout',
... repository=repo_dir,
... checkout_root=checkout_dir,
... log_root=log_dir)
>>> bt = BuildTask(name='project_build',
... source=ct,
... build_root=build_dir,
... build_flags=['--' ,'-j4'],
... log_root=log_dir)
Note how we passed the ct object directly to the source argument of the
BuildTask
constructor: we are telling the BuildTask
to look
for the sources to build in the checkout directory. You can also pass a normal
path to the source argument instead.
>>> from valjean.cosette.env import Env
>>> env = Env()
>>> ct_up, ct_status = ct.do(env, config=None)
>>> print(ct_status)
TaskStatus.DONE
>>> pprint(ct_up)
{'project_checkout': {'checkout_log': '.../log/project_checkout.log',
'elapsed_time': ...,
'output_dir': '.../checkout/project_checkout',
'repository': '.../repo'}}
>>> env.apply(ct_up) # apply CheckoutTask's environment update
... # for this example, this is actually optional
>>> bt_up, bt_status = bt.do(env=env, config=None)
>>> print(bt_status)
TaskStatus.DONE
>>> pprint(bt_up)
{'project_build': {'build_log': '.../log/project_build.log',
'elapsed_time': ...,
'output_dir': '.../build/project_build'}}
- class valjean.cosette.code.CheckoutTask(name, *, repository, checkout_root=None, log_root=None, flags=None, ref=None, vcs='git', deps=None, soft_deps=None)[source]
Task to check out code from a version-control system. The actual code checkout is performed when the task is executed.
- __init__(name, *, repository, checkout_root=None, log_root=None, flags=None, ref=None, vcs='git', deps=None, soft_deps=None)[source]
Construct a
CheckoutTask
.- Parameters:
name (str) – The name of this task.
checkout_root (str) – The directory where the code will be checked out, or None for the configuration default.
repository (str) – The repository for checkout.
log_root (str) – The path to the log directory, or None for the configuration default.
flags (list(str) or None) – The flags to be used at checkout time, as a list of strings.
ref (str or None) – The reference to check out.
vcs (str or None) – The version-control system to use. Must be one of:
'git'
(default),'svn'
,'cvs'
,'copy'
.deps (list(Task) or None) – The dependencies for this task (see
Task.__init__()
for the format), or None.soft_deps (list(Task) or None) – The soft dependencies for this task (see
Task.__init__()
for the format), or None.
- GIT = 'git'
Path to the
git
executable. May be overridden before class instantiation.
- class valjean.cosette.code.BuildTask(name, source, *, build_root=None, log_root=None, targets=None, build_system='cmake', configure_flags=None, build_flags=None, deps=None, soft_deps=None)[source]
Task to build an existing source tree. The build is actually performed when the task is executed.
- __init__(name, source, *, build_root=None, log_root=None, targets=None, build_system='cmake', configure_flags=None, build_flags=None, deps=None, soft_deps=None)[source]
Construct a
BuildTask
.- Parameters:
name (str) – The name of this task.
source (str) – The path to the directory containing the sources, or a
CheckoutTask
object (in which case the checkout directory will be assumed to contain the sources).build_root (str) – The path to the build directory (a subdirectory will be created).
log_root (str) – The path to the log directory.
targets (list(str) or None) – A list of targets to build, or None for the default target.
build_system (str) – The name of the build system to use. Must be one of:
'cmake'
(default),'configure'
.configure_flags (list) – The flags that will be passed to the build tool at configuration time, as a list of strings.
build_flags (list) – The flags that will be passed to the build tool at build time, as a list of strings.
deps (list(Task) or None) – The dependencies for this task (see
Task.__init__()
for the type), or None.soft_deps (list(Task) or None) – The soft dependencies for this task (see
Task.__init__()
for the type), or None.
- cmake_build_sys(targets, configure_flags, build_flags)[source]
Return a function that builds a project using cmake.
- CMAKE = 'cmake'
Path to the
cmake
executable. May be overridden before class instantiation.