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 `_. 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 `_ 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 This will load the virtual environment, execute ````, 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``.