.. _module-pw_env_setup:

============
pw_env_setup
============
.. pigweed-module::
   :name: pw_env_setup

A classic problem in the embedded space is reducing the time from git clone
to having a binary executing on a device. The issue is that an entire suite
of tools is needed for non-trivial production embedded projects. For example:

- A C++ compiler for your target device, and also for your host
- A build system or three; for example, GN, Ninja, CMake, Bazel
- A code formatting program like clang-format
- A debugger like OpenOCD to flash and debug your embedded device (OpenOCD
  support removed for Windows)
- A known Python version with known modules installed for scripting
- A Go compiler for the Go-based command line tools

…and so on.

In the server space, container solutions like Docker or Podman solve this;
however, in our experience container solutions are a mixed bag for embedded
systems development where one frequently needs access to native system
resources like USB devices, or must operate on Windows.

``pw_env_setup`` is our compromise solution for this problem that works on Mac,
Windows, and Linux. It leverages the Chrome packaging system `CIPD`_ to
bootstrap a Python installation, which in turn inflates a virtual
environment. The tooling is installed into your workspace, and makes no
changes to your system. This tooling is designed to be reused by any
project.

.. _module-pw_env_setup-bootstrap:

----------------------------
Bootstrapping and activating
----------------------------
.. _CIPD: https://github.com/luci/luci-go/tree/HEAD/cipd

Users interact with  ``pw_env_setup`` with two commands: ``. bootstrap.sh`` and
``. activate.sh``. The bootstrap command always pulls down the current versions
of CIPD packages and sets up the Python virtual environment. The activate
command reinitializes a previously configured environment, and if none is found,
runs bootstrap.

.. note::

   On Windows the scripts used to set up the environment are ``bootstrap.bat``
   and ``activate.bat``.

   ``bootstrap.fish`` and ``activate.fish`` are also available for `Fish shell
   <https://fishshell.com/>`_ users.

   For simplicity they will be referred to with the ``.sh`` endings unless the
   distinction is relevant.

On POSIX systems, the environment can be deactivated by running ``deactivate``.

----------------------------------
Using pw_env_setup in your project
----------------------------------

Downstream Projects Using Pigweed's Packages
============================================

Projects using Pigweed can leverage ``pw_env_setup`` to install Pigweed's
dependencies or their own dependencies. Projects that only want to use Pigweed's
dependencies without modifying them can just source Pigweed's ``bootstrap.sh``
and ``activate.sh`` scripts.

An example of what your project's `bootstrap.sh` could look like is below. This
assumes `bootstrap.sh` is at the top level of your repository.

.. code-block:: bash

   # Do not include a "#!" line, this must be sourced and not executed.

   # This assumes the user is sourcing this file from it's parent directory. See
   # below for a more flexible way to handle this.
   PROJ_SETUP_SCRIPT_PATH="$(pwd)/bootstrap.sh"

   export PW_PROJECT_ROOT="$(_python_abspath "$(dirname "$PROJ_SETUP_SCRIPT_PATH")")"

   # You may wish to check if the user is attempting to execute this script
   # instead of sourcing it. See below for an example of how to handle that
   # situation.

   # Source Pigweed's bootstrap utility script.
   # Using '.' instead of 'source' for POSIX compatibility. Since users don't use
   # dash directly, using 'source' in most documentation so users don't get
   # confused and try to `./bootstrap.sh`.
   . "$PW_PROJECT_ROOT/third_party/pigweed/pw_env_setup/util.sh"

   pw_check_root "$PW_ROOT"
   _PW_ACTUAL_ENVIRONMENT_ROOT="$(pw_get_env_root)"
   export _PW_ACTUAL_ENVIRONMENT_ROOT
   SETUP_SH="$_PW_ACTUAL_ENVIRONMENT_ROOT/activate.sh"
   pw_bootstrap --args...  # See below for details about args.
   pw_finalize bootstrap "$SETUP_SH"


Bazel Usage
-----------
Bazel projects should pull in CIPD dependencies using the CIPD module extension
rather than relying on ``bootstrap.sh``.

.. attention::
   The ``cipd_repository`` rule is deprecated. Use the new module extension
   instead. See :ref:`module-pw_env_setup-bazel-cipd` for full documentation,
   including how to migrate from the old rule.

Example usage in ``MODULE.bazel``:

.. code-block:: starlark

   cipd = use_extension("//pw_env_setup/bazel/cipd:defs.bzl", "cipd")

   cipd.require(
       name = "qemu",
       build_file = "//third_party/qemu:qemu.BUILD",
       packages = {
           "fuchsia/third_party/qemu/${platform}": "git_revision:aa90f1161bb17a4863e16ec2f75104cff0752d4e",
       },
   )

   use_repo(cipd, "qemu")

This will make the repository available to your project and all projects that
want to use it based on the name. Only the repositories that are actually used
will have CIPD packages downloaded.

For more details and advanced usage, see the full documentation in
:ref:`module-pw_env_setup-bazel-cipd`.

User-Friendliness
-----------------

You may wish to allow sourcing `bootstrap.sh` from a different directory. In
that case you'll need the following at the top of `bootstrap.sh`.

.. code-block:: bash

   _python_abspath () {
     python -c "import os.path; print(os.path.abspath('$@'))"
   }

   # Use this code from Pigweed's bootstrap to find the path to this script when
   # sourced. This should work with common shells. PW_CHECKOUT_ROOT is only used in
   # presubmit tests with strange setups, and can be omitted if you're not using
   # Pigweed's automated testing infrastructure.
   if test -n "$PW_CHECKOUT_ROOT"; then
     PROJ_SETUP_SCRIPT_PATH="$(_python_abspath "$PW_CHECKOUT_ROOT/bootstrap.sh")"
     unset PW_CHECKOUT_ROOT
   # Shell: bash.
   elif test -n "$BASH"; then
     PROJ_SETUP_SCRIPT_PATH="$(_python_abspath "$BASH_SOURCE")"
   # Shell: zsh.
   elif test -n "$ZSH_NAME"; then
     PROJ_SETUP_SCRIPT_PATH="$(_python_abspath "${(%):-%N}")"
   # Shell: dash.
   elif test ${0##*/} = dash; then
     PROJ_SETUP_SCRIPT_PATH="$(_python_abspath \
       "$(lsof -p $$ -Fn0 | tail -1 | sed 's#^[^/]*##;')")"
   # If everything else fails, try $0. It could work.
   else
     PROJ_SETUP_SCRIPT_PATH="$(_python_abspath "$0")"
   fi

You may also wish to check if the user is attempting to execute `bootstrap.sh`
instead of sourcing it. Executing `bootstrap.sh` would download everything
required for the environment, but cannot modify the environment of the parent
process. To check for this add the following.

.. code-block:: bash

   # Check if this file is being executed or sourced.
   _pw_sourced=0
   # If not running in Pigweed's automated testing infrastructure the
   # SWARMING_BOT_ID check is unnecessary.
   if [ -n "$SWARMING_BOT_ID" ]; then
     # If set we're running on swarming and don't need this check.
     _pw_sourced=1
   elif [ -n "$ZSH_EVAL_CONTEXT" ]; then
     case $ZSH_EVAL_CONTEXT in *:file) _pw_sourced=1;; esac
   elif [ -n "$KSH_VERSION" ]; then
     [ "$(cd $(dirname -- $0) && pwd -P)/$(basename -- $0)" != \
       "$(cd $(dirname -- ${.sh.file}) && pwd -P)/$(basename -- ${.sh.file})" ] \
       && _pw_sourced=1
   elif [ -n "$BASH_VERSION" ]; then
     (return 0 2>/dev/null) && _pw_sourced=1
   else  # All other shells: examine $0 for known shell binary filenames
     # Detects `sh` and `dash`; add additional shell filenames as needed.
     case ${0##*/} in sh|dash) _pw_sourced=1;; esac
   fi

   _pw_eval_sourced "$_pw_sourced"

Downstream Projects Using Different Packages
============================================
Projects depending on Pigweed but using additional or different packages should
copy the Pigweed `sample project`'s ``bootstrap.sh`` and ``pigweed.json`` and
update the call to ``pw_bootstrap``. Search for "downstream" for other places
that may require changes, like setting the ``PW_ROOT`` and ``PW_PROJECT_ROOT``
environment variables. Explanations of parts of ``pigweed.json`` are described
here.

.. _sample project: https://pigweed.googlesource.com/pigweed/sample_project/+/HEAD

``pw.pw_env_setup.root_variable``
  Variable used to point to the root of the source tree. Optional, can always
  use ``PW_PROJECT_ROOT`` instead. (That variable will be set regardless of
  whether this is provided.)

``pw.pw_env_setup.relative_pigweed_root``
  Location of the Pigweed submodule within the source tree. Optional—environment
  setup will work correctly without this. If present, will confirm that it's
  correct. May be used by other tooling.

``pw.pw_env_setup.cipd_package_files``
  CIPD package file. JSON file consisting of a list of additional CIPD package
  files to import and a list of dictionaries with "path", "platforms", "subdir",
  "tags", and "version_file" keys. Both top-level lists are optional. An
  example is below. Only "path", "platforms", and "tags" are required. If
  "version_file" is specified then ``pw doctor`` will fail if that version file
  is not present. If "subdir" is specified then this packages will be installed
  in a subdirectory of the directory created for packages in this file.

.. code-block:: json

   {
     "included_files": [
       "foo.json"
     ],
     "packages": [
       {
         "path": "infra/3pp/tools/go/${platform}",
         "platforms": [
             "linux-amd64",
             "linux-arm64",
             "mac-amd64",
             "windows-amd64"
         ],
         "subdir": "pa/th",
         "tags": [
           "version:2@1.16.3"
         ],
         "version_file": ".versions/go.cipd_version"
       }
     ]
   }

``pw.pw_env_setup.project_actions``
  A list of plugins to load and run after CIPD setup, but prior to virtualenv
  setup, for e.g. downloading project-specific tools or artifacts needed by
  later steps. Particularly useful for downstream projects with limited CIPD
  access.

  A plugin is specified as a dictionary with two keys: "import_path" and
  "module_name". The "import_path" is relative to the root of the checkout.

  The specified module must provide a "run_actions" method which takes a single
  argument, "env_vars", which is a pw_env_setup.Environment instance.

  Sample plugin and pigweed.json blob:

.. code-block:: python

   """Sample pw_env_setup project action plugin.

   A sample/starter project action plugin template for pw_env_setup.
   """
   def run_action(**kwargs):
       """Sample project action."""
       if "env" not in kwargs:
           raise ValueError(f"Missing required kwarg 'env', got %{kwargs}")

       kwargs["env"].prepend("PATH", "PATH_TO_NEW_TOOLS")
       raise NotImplementedError("Sample project action running!")

.. code-block:: json

   "project_actions" : [
      {
       "import_path": "pw_env_setup",
       "module_name": "sample_project_action"
      }
   ],

``pw.pw_env_setup.virtualenv.gn_args``
  Any necessary GN args to be used when installing Python packages.

``pw.pw_env_setup.virtualenv.gn_targets``
  Target for installing Python packages. Downstream projects will need to
  create targets to install their packages or only use Pigweed Python packages.

``pw.pw_env_setup.virtualenv.gn_root``
  The root directory of your GN build tree, relative to ``PW_PROJECT_ROOT``.
  This is the directory your project's ``.gn`` file is located in. If you're
  only installing Pigweed Python packages, use the location of the Pigweed
  submodule.

``pw.pw_env_setup.virtualenv.requirements``
  A list of Python Pip requirements files for installing into the Pigweed
  virtualenv. Each file will be passed as additional ``--requirement`` argument
  to a single ```pip install`` at the beginning of bootstrap's ``Python
  environment`` setup stage. See the `Requirements Files documentation`_ for
  details on what can be specified using requirements files.

``pw.pw_env_setup.virtualenv.constraints``
  A list of Python Pip constraints files. These constraints will be passed to
  every ``pip`` invocation as an additional ``--constraint`` argument during
  bootstrap.  virtualenv. See the `Constraints Files documentation`_ for details
  on formatting.

``pw.pw_env_setup.virtualenv.system_packages``
  A boolean value that can be used the give the Python virtual environment
  access to the system site packages. Defaults to ``false``.

``pw.pw_env_setup.virtualenv.pip_install_offline``
  A boolean value that adds ``--no-index`` to all ``pip install`` commands that
  are part of bootstrap. This forces pip to not reach out to the internet
  (usually `pypi.org <https://pypi.org/>`_) to download packages. Using this
  option requires setting
  ``pw.pw_env_setup.virtualenv.pip_install_find_links``. Defaults to
  ``false``.

  .. seealso::
     The Python GN guide for offline pip installation:
     :ref:`docs-python-build-installing-offline`

``pw.pw_env_setup.virtualenv.pip_install_find_links``
  List of paths to folders containing Python wheels (``*.whl``) or source tar
  files (``*.tar.gz``). Pip will check each of these directories when looking
  for potential install candidates. Each path will be passed to all ``pip
  install`` commands as ``--find-links PATH``.

  .. tip::
     Environment variables may be used in these paths. For example:

     .. code-block:: json

        "virtualenv": {
           "pip_install_find_links": [
             "${PW_PROJECT_ROOT}/pip_cache"
           ]
         }

``pw.pw_env_setup.virtualenv.pip_install_require_hashes``
  Adds ``--require-hashes`` This option enforces hash checking on Python
  package files. Defaults to ``false``.

``pw.pw_env_setup.virtualenv.pip_install_disable_cache``
  A boolean value that adds ``--no-cache-dir`` to all ``pip install`` commands
  that are part of bootstrap. This forces pip to ignore any previously cached
  Python packages. On most systems this is located in
  ``~/.cache/pip/``. Defaults to ``false``.

``pw.pw_env_setup.virtualenv.extra_vars``
  A dictionary of new environment variables to be automatically added during
  bootstrapping.

  .. tip::
    You can nest other environment variables. For example:

    .. code-block:: json

       "virtualenv": {
          "extra_vars": {
             "ZEPHYR_SDK_INSTALL_DIR": "${PW_ZEPHYR_SDK_CIPD_INSTALL_DIR}"
          }
       }

``pw.pw_env_setup.optional_submodules``
  By default environment setup will check that all submodules are present in
  the checkout. Any submodules in this list are excluded from that check.

``pw.pw_env_setup.required_submodules``
  If this is specified instead of ``optional_submodules`` bootstrap will only
  complain if one of the required submodules is not present. Combining this
  with ``optional_submodules`` is not supported.

``pw.pw_env_setup.pw_packages``
  A list of packages to install using :ref:`pw_package <module-pw_package>`
  after the rest of bootstrap completes.

``pw.pw_env_setup.gni_file``
  Location to write a ``.gni`` file containing paths to many things within the
  environment directory. Defaults to
  ``build_overrides/pigweed_environment.gni``.

``pw.pw_env_setup.json_file``
  Location to write a ``.json`` file containing step-by-step modifications to
  the environment, for reading by tools that don't inherit an environment from
  a sourced ``bootstrap.sh``.

An example of a config file is below.

.. code-block:: json

   {
     "pw": {
       "pw_env_setup": {
         "root_variable": "EXAMPLE_ROOT",
         "cipd_package_files": [
           "pigweed/pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json",
           "pigweed/pw_env_setup/py/pw_env_setup/cipd_setup/luci.json"
           "tools/myprojectname.json"
         ],
         "virtualenv": {
           "gn_root": ".",
           "gn_targets": [
             ":python.install",
           ],
           "system_packages": false
         },
         "pw_packages": [],
         "optional_submodules": [
           "optional/submodule/one",
           "optional/submodule/two"
         ],
         "gni_file": "tools/environment.gni",
         "json_file": "tools/environment.json"
       }
     }
   }

Only the packages necessary for almost all projects based on Pigweed are
included in the ``cipd_setup/pigweed.json`` file. A number of other files are
present in that directory for projects that need more than the minimum.
Internal-Google projects using LUCI should at least include ``luci.json``.

In case the CIPD packages need to be referenced from other scripts, variables
like ``PW_${BASENAME}_CIPD_INSTALL_DIR`` point to the CIPD install directories,
where ``${BASENAME}`` is ``"PIGWEED"`` for
``"pigweed/pw_env_setup/py/pw_env_setup/cipd_setup/pigweed.json"`` and
``"LUCI"`` for
``"pigweed/pw_env_setup/py/pw_env_setup/cipd_setup/luci.json"``. This example
would set the following environment variables.

- ``PW_LUCI_CIPD_INSTALL_DIR``
- ``PW_MYPROJECTNAME_CIPD_INSTALL_DIR``
- ``PW_PIGWEED_CIPD_INSTALL_DIR``

These directories are also referenced in the gni_file specified by the
environment config file as ``dir_cipd_${BASENAME}``. This allows the GN build to
reliably reference these directories without using GN ``getenv()`` calls or
hardcoding paths.

In addition, ``PW_${BASENAME}_CIPD_INSTALL_DIR`` and
``PW_${BASENAME}_CIPD_INSTALL_DIR/bin`` are both added to ``PATH`` for each
package directory.

If multiple packages install executables with the same name, the file mentioned
last topologically takes priority. For example, with the file contents below,
``d.json``'s entries will appear in ``PATH`` before ``c.json``'s, which will
appear before ``b.json``'s, which will appear before ``a.json``'s.

.. code-block:: json
   :caption: :octicon:`file;1em` pigweed.json

   {
     "pw": {
       "pw_env_setup": {
         "cipd_package_files": [
           "a.json",
           "b.json",
           "d.json"
         ]
       }
     }
   }

.. code-block:: json
   :caption: :octicon:`file;1em` a.json

   {
     "package_files": [
       // ...
     ]
   }

.. code-block:: json
   :caption: :octicon:`file;1em` b.json

   {
     "included_files": ["c.json"],
     "package_files": [
       // ...
     ]
   }

.. code-block:: json
   :caption: :octicon:`file;1em` c.json

   {
     "package_files": [
       // ...
     ]
   }

.. code-block:: json
   :caption: :octicon:`file;1em` d.json

   {
     "package_files": [
       // ...
     ]
   }

.. code-block::
   :caption: Effective File Loading Order

   pigweed.json
   a.json
   b.json
   c.json
   d.json

Pinning Python Packages
=======================
Python modules usually express dependencies as ranges, which makes it easier to
install many Python packages that might otherwise have conflicting dependencies.
However, this means version of packages can often change underneath us and
builds will not be hermetic.

To ensure versions don't change without approval, Pigweed by default pins the
versions of packages it depends on using a `pip constraints file`_. To pin the
versions of additional packages your project depends on, run
``pw python-packages list <path/to/constraints/file>`` and then add
``pw_build_PIP_CONSTRAINTS = ["//path/to/constraints/file"]`` to your project's
``.gn`` file (see `Pigweed's .gn file`_ for an example).

.. _pip constraints file: https://pip.pypa.io/en/stable/user_guide/#constraints-files
.. _default constraints: https://cs.pigweed.dev/pigweed/+/main:pw_env_setup/py/pw_env_setup/virtualenv_setup/constraint.list
.. _Pigweed's .gn file: https://cs.pigweed.dev/pigweed/+/main:.gn

To update packages, set ``pw_build_PIP_CONSTRAINTS = []``, delete the
environment, and bootstrap again. Then run the ``list`` command from above
again, and run ``pw presubmit``.

Environment Variables
=====================
Input Variables
---------------
The following environment variables affect env setup behavior. Most users will
never need to set these.

``CIPD_CACHE_DIR``
  Location of CIPD cache dir. Read by CIPD, but if unset will be defaulted to
  ``$HOME/.cipd-cache-dir``.

``PW_NO_CIPD_CACHE_DIR``
  Disables the CIPD cache.

``PW_ACTIVATE_SKIP_CHECKS``
  If set, skip running ``pw doctor`` at end of bootstrap/activate. Intended to
  be used by automated tools but not interactively.

``PW_BANNER_FUNC``
  Command to print a banner at the beginning of bootstrap.

``PW_BOOTSTRAP_PYTHON``
  Python executable to be used, for example "python3". Defaults to
  "python3" if that's in ``PATH``, then tries "python".

``PW_CIPD_SERVICE_ACCOUNT_JSON``
  Value to pass as ``-service-account-json`` to CIPD invocations. This should
  point either to a service account JSON key file, or be the magical value
  ``:gce`` to tell the tool to fetch tokens from GCE metadata server.

``PW_ENVIRONMENT_ROOT``
  Location to which packages are installed. Defaults to ``environment`` folder
  within the checkout root. This variable is cleared after environment setup is
  complete.

``PW_ENVSETUP_DISABLE_SPINNER``
  Disable the spinner during env setup. Intended to be used when the output is
  being redirected to a log.

``PW_ENVSETUP_DISABLE_SPINNER``
  Disable the console spinner that runs when waiting for env setup steps to
  complete.

``PW_ENVSETUP_NO_BANNER``
  Skip printing the banner.

``PW_ENVSETUP_QUIET``
  Disables all non-error output.

``PW_PROJECT_ROOT``
  The absolute path of the project using Pigweed's env setup. For Pigweed this
  is the same as ``PW_ROOT``. This should be set by the project's bootstrap
  script.

``PW_ROOT``
  The absolute path to the Pigweed repository within ``PW_PROJECT_ROOT``. This
  should be set by the project's bootstrap script.

Output Variables
----------------
The following environment variables are set by env setup.

``PATH``
  System executable search path. Many of the environment variables below are
  also added to this variable.

``_PW_ACTUAL_ENVIRONMENT_ROOT``
  Location the environment was installed into. Separate from
  ``PW_ENVIRONMENT_ROOT`` because setting that implicitly and switching to
  another project directory causes unexpected behavior.

``PW_CIPD_INSTALL_DIR``
  Top-level CIPD install directory. This is where the ``cipd`` executable is.

``PW_*_CIPD_INSTALL_DIR``
  Each CIPD package file is installed into its own directory. This allows other
  tools to determine what those directories are. The ``*`` is replaced with an
  all-caps version of the basename of the package file, without the extension.
  (E.g., "path/foo.json" becomes ``PW_FOO_CIPD_INSTALL_DIR``.)

``PW_PACKAGE_ROOT``
  Location that packages installed by ``pw package`` will be installed to.

``VIRTUAL_ENV``
  Path to Pigweed's virtualenv.

Non-Shell Environments
======================
If using this outside of bash—for example directly from an IDE or CI
system—users can process the ``actions.json`` file that's generated in the
location specified by the environment config. It lists variables to set, clear,
and modify. An example ``actions.json`` is shown below. The "append" and
"prepend" actions are listed in the order they should be applied, so the
``<pigweed-root>/out/host/host_tools`` entry should be at the beginning of
``PATH`` and not in the middle somewhere.

.. code-block:: json

   {
       "modify": {
           "PATH": {
               "append": [],
               "prepend": [
                   "<pigweed-root>/environment/cipd",
                   "<pigweed-root>/environment/cipd/pigweed",
                   "<pigweed-root>/environment/cipd/pigweed/bin",
                   "<pigweed-root>/environment/cipd/luci",
                   "<pigweed-root>/environment/cipd/luci/bin",
                   "<pigweed-root>/environment/pigweed-venv/bin",
                   "<pigweed-root>/out/host/host_tools"
               ],
               "remove": []
           }
       },
       "set": {
           "PW_PROJECT_ROOT": "<pigweed-root>",
           "PW_ROOT": "<pigweed-root>",
           "_PW_ACTUAL_ENVIRONMENT_ROOT": "<pigweed-root>/environment",
           "PW_CIPD_INSTALL_DIR": "<pigweed-root>/environment/cipd",
           "CIPD_CACHE_DIR": "<home>/.cipd-cache-dir",
           "PW_PIGWEED_CIPD_INSTALL_DIR": "<pigweed-root>/environment/cipd/pigweed",
           "PW_LUCI_CIPD_INSTALL_DIR": "<pigweed-root>/environment/cipd/luci",
           "VIRTUAL_ENV": "<pigweed-root>/environment/pigweed-venv",
           "PYTHONHOME": null,
           "__PYVENV_LAUNCHER__": null
       }
   }

Many of these variables are directly exposed to the GN build as well, through
the GNI file specified in the environment config file.

.. code-block::

   declare_args() {
     pw_env_setup_CIPD_LUCI = "<environment-root>/cipd/packages/luci"
     pw_env_setup_CIPD_PIGWEED = "<environment-root>/cipd/packages/pigweed"
     pw_env_setup_PACKAGE_ROOT = "<environment-root>/packages"
     pw_env_setup_VIRTUAL_ENV = "<environment-root>/pigweed-venv"
   }

It's straightforward to use these variables.

.. code-block::

   import("//build_overrides/pigweed_environment.gni")

   deps = [ "$pw_env_setup_CIPD_PIGWEED/..." ]

Implementation
==============
The environment is set up by installing CIPD and Python packages in
``PW_ENVIRONMENT_ROOT`` or ``<checkout>/environment``, and saving modifications
to environment variables in setup scripts in those directories. To support
multiple operating systems this is done in an operating system-agnostic manner
and then written into operating system-specific files to be sourced now and in
the future when running ``activate.sh`` instead of ``bootstrap.sh``. In the
future these could be extended to C shell and PowerShell. A logical mapping of
high-level commands to system-specific initialization files is shown below.

.. grid:: 1
   :padding: 0

   .. grid-item-card::
      :columns: 12
      :class-header: font-monospace

      SET $PW_ROOT /home/$USER/pigweed
      ^^^

      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item:: **Windows**

         .. grid-item:: **Linux & Mac (sh-compatible shells)**

      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item::

            .. code-block:: dosbatch

               set PW_ROOT /home/%USER%/pigweed

         .. grid-item::

            .. code-block:: shell

               PW_ROOT="/home/$USER/pigweed"
               export PW_ROOT

.. grid:: 1
   :padding: 0

   .. grid-item-card::
      :columns: 12
      :class-header: font-monospace

      PREPEND $PATH $PW_ROOT/.env/bin
      ^^^
      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item:: **Windows**

         .. grid-item:: **Linux & Mac (sh-compatible shells)**

      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item::

            .. code-block:: dosbatch

               set PATH=%PW_ROOT%/.env/bin;%PATH%

         .. grid-item::

            .. code-block:: shell

               PATH="$(\
                 echo "$PATH" | \
                 sed "s|:$PW_ROOT/.env/bin:|:|g;" | \
                 sed "s|^$PW_ROOT/.env/bin:||g;" | \
                 sed "s|:$PW_ROOT/.env/bin$||g;")"
               PATH="$PW_ROOT/.env/bin;$PATH"
               export PATH

.. grid:: 1
   :padding: 0

   .. grid-item-card::
      :columns: 12
      :class-header: font-monospace

      ECHO "Setup Complete!"
      ^^^

      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item:: **Windows**

         .. grid-item:: **Linux & Mac (sh-compatible shells)**


      .. grid:: 2
         :margin: 0
         :padding: 0

         .. grid-item::

            .. code-block:: doscon

               > echo Setup Complete!

         .. grid-item::

            .. code-block:: console

               $ echo "Setup Complete!"


.. _Requirements Files documentation: https://pip.pypa.io/en/stable/user_guide/#requirements-files
.. _Constraints Files documentation: https://pip.pypa.io/en/stable/user_guide/#constraints-files

.. toctree::
   :hidden:
   :maxdepth: 1

   bazel/cipd/docs
