|  | Setting Up a Build/Development Environment
##########################################
While ``dds`` is able to build itself, several aspects of build infrastructure
are controlled via Python scripts. You will need Python 3.6 or later available
on your system to get started.
.. _Poetry: python-poetry.org
Getting Started with *Poetry*
*****************************
``dds`` CI runs atop `Poetry`_, a Python project management tool. While designed
for Python projects, it serves our purposes well.
Installing Poetry
=================
If you do not have Poetry already installed, it can be obtained easily for most
any platform.
`Refer to the Poetry "Installation" documentation to learn how to get Poetry on your platform <https://python-poetry.org/docs/#installation>`_.
The remainder of this documentation will assume you are able to execute
``poetry`` on your command-line.
Setting Up the Environment
==========================
To set up the scripts and Python dependencies required for CI and development,
simply execute the following command from within the root directory of the
project::
  $ poetry install
Poetry will then create a Python virtual environment that contains the Python
scripts and tools required for building and developing ``dds``.
The Python virtual environment that Poetry created can be inspected using
``poetry env info``, and can be deleted from the system using
``poetry env remove``. Refer to
`the Poetry documentation <https://python-poetry.org/docs>`_ for more
information about using Poetry.
Using the Poetry Environment
****************************
Once the ``poetry install`` command has been executed, you will now be ready to
run the ``dds`` CI scripts and tools.
The scripts are installed into the virtual environment, and need not be globally
installed anywhere else on the system. You can only access these scripts by
going through Poetry. To run any individual command within the virtual
environment, use ``poetry run``::
  $ poetry run <some-command>
This will load the virtual environment, execute ``<some-command>``, then exit
the environment. This is useful for running CI scripts from outside of the
virtualenv.
**Alternatively**, the environment can be loaded persistently into a shell
session by using ``poetry shell``::
  $ poetry shell
This will spawn a new interactive shell process with the virtual environment
loaded, and you can now run any CI or development script without needing to
prefix them with ``poetry run``.
Going forward, the documentation will assume you have the environment loaded
as-if by ``poetry shell``, but any ``dds``-CI-specific command can also be
executed by prefixing the command with ``poetry run``.
Working With an MSVC Environment in VSCode
==========================================
If you use Visual Studio Code as your editor and MSVC as your C++ toolchain,
you'll need to load the MSVC environment as part of your build task. ``dds`` CI
has a script designed for this purpose. To use it, first load up a shell within
the Visual C++ environment, then, from within the previously create Poetry
environment, run ``gen-msvs-vsc-task``. This program will emit a Visual Studio
Code JSON build task that builds ``dds`` and also contains the environment
variables required for the MSVC toolchain to compile and link programs. You can
save this JSON task into ``.vscode/tasks.json`` to use as your primary build
task while hacking on ``dds``.
 |