Development setup ================= The following instructions outline the process for setting up a development environment for the VC-2 conformance software and the procedures for running tests and generating documentation. Checking out repositories ------------------------- The VC-2 conformance software is split across in the following `Git `_ repositories, each containing a Python package of the same name: ``_ (:py:mod:`vc2_conformance`) The main conformance software repository on which this documentation focuses. ``_ (:py:mod:`vc2_conformance_data`) Data files (e.g. test pictures) used in the conformance testing process. ``_ (:py:mod:`vc2_data_tables`) Data tables and constant definitions from the VC-2 standard. ``_ (:py:mod:`vc2_bit_widths`) Mathematical routines for computing near worst case signals for VC-2 codecs. The above repositories should be cloned into local directories, e.g. using:: $ git clone git@github.com:bbc/vc2_conformance.git $ git clone git@github.com:bbc/vc2_conformance_data.git $ git clone git@github.com:bbc/vc2_data_tables.git $ git clone git@github.com:bbc/vc2_bit_widths.git `Pre-commit hooks `_ are used to enforce certain code standards in these repositories. These should be installed as follows:: $ # For each cloned repository... $ cd path/to/repo/ $ pre-commit install Virtual environment ------------------- It is strongly recommended that development is carried out in a `Python virtual environment `_ (see warning below). This can be setup using:: $ python -m virtualenv --python venv This will create a virtual environment in the directory ``venv`` which uses the python interpreter ````, which should generally be one of ``python2`` or ``python3``. Once created, the virtual environment must be activated in any shell you use using:: $ source venv/bin/activate .. note:: Python virtual environment provides an isolated environment in which packages can be installed without impacting on the rest of the system. Once activated, the ``python`` and ``pip`` commands will use the python version and packages setup within the virtual environment. .. warning:: When working outside a virtual environment, Python packages included by some operating systems (e.g. Ubuntu) can be very out of date leading to problems during development. This is the result of certain development dependencies not correctly specifiying their version requirements and is outside of our control. By using a virtual environment, up-to-date versions of all dependencies will be installed which avoids these problems. .. note:: The VC-2 conformance software itself *does* correctly specify its dependencies so these problems only apply during development and should not affect end users. Development installation ------------------------ A development installation of the conformance software can be performed directly from each of the cloned repositories as follows:: $ # Each repo should be installed as follows, in the following order: $ # * vc2_data_tables $ # * vc2_bit_widths $ # * vc2_conformance_data $ # * vc2_conformance $ cd path/to/repo/ $ # Install in editable/development mode (so edits take effect immediately) $ pip install -e . $ # Install test suite dependencies $ pip install -r requirements-test.txt $ # Install documentation building dependencies (not present for all $ # repositories) $ pip install -r requirements-docs.txt After installation, the various ``vc2-*`` commands will be made available in your ``$PATH`` and the various ``vc2_*`` Python modules in your ``$PYTHONPATH``. These will point directly to the cloned source code and so changes will take effect immediately. Running tests ------------- Test routines relating to the code in each repository can be found in the ``tests/`` directory of each repository. The test suites are built on `pytest `_ and, once a development install has been completed, can be executed as follows:: $ py.test path/to/vc2_data_tables/tests/ $ py.test path/to/vc2_bit_widths/tests/ $ py.test path/to/vc2_conformance_data/tests/ $ py.test path/to/vc2_conformance/tests/ Building documentation ---------------------- HTML documentation (including the documentation you're reading now) is built as follows (after a development install has been performed):: $ make -C path/to/vc2_data_tables/docs html $ make -C path/to/vc2_bit_widths/docs html $ make -C path/to/vc2_conformance_data/docs html $ make -C path/to/vc2_conformance/docs html HTML documentation will be written to the ``docs/build/html/`` directory (open the ``index.html`` file in a web browser to read it). Alternatively, PDF documentation can be built by replacing ``html`` with ``latexpdf`` in the above commands. This will require a working installation of `LaTeX `_ and `Inkscape `_ to build. In addition, for cross-references between PDFs to be created correctly, the documentation must be built within the Python virtual environment where the various ``vc2_*`` Python packages are installed in development/editable mode.