Upgrade macos

This commit is contained in:
Bassem Girgis
2025-03-19 08:52:56 -05:00
parent 53580cb51f
commit d29ef955f5
8041 changed files with 1936720 additions and 130842 deletions

View File

@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 62c5b12be0df182db9813478c0b07023
tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@@ -0,0 +1,128 @@
PRRTE DVM Configuration
=======================
The PMIx Reference RunTime Environment (PRRTE) can be instantiated
as a Distributed Virtual Machine (DVM) in two ways. First, the
``prte`` command can be executed at a shell prompt. This will discover
the available resources (either from hostfile or as allocated by a
resource manager) and start a PRRTE shepherd daemon (:ref:`prted(1)
<man1-prted>`) on each of the indicated nodes.
The other method, however, is to bootstrap the DVM at time of cluster
startup. Bootstrapping PRRTE allows the DVM to serve as the system-level
runtime, providing a full-service PMIx environment to sessions under
its purview. Integration to an appropriately enabled scheduler can
provide a full workload managed environment for users.
Establishing the DVM using the bootstrap method requires that a PRRTE
configuration file be created and made available on every node of the
cluster at node startup. The configuration file provides necessary
information for establishing the communication infrastructure between
the DVM controller and the compute node daemons. It also provides a
means for easily defining DVM behavior for options such as logging,
system-level prolog and epilog scripts for each session, and other
PRRTE features.
The configuration file can be manually created or can be created using
the `PRRTE configuration tool <configurator.html>`_.
Manual creation can best be done
by editing the example configuration file (``<source-location>/src/etc/prte.conf``).
This file contains all the supported configuration options, with all
entries commented out. Simply uncomment the options of interest and
set them to appropriate values. The file will be installed into the
final ``<install-location>/etc`` when ``make install`` is performed.
Configuration Options
---------------------
The following options are supported by PRRTE |prte_ver|.
While we make every effort to maintain compatibility with prior versions,
we recommend that you check options when installing new versions to
see what may have changed and/or been added. We also recommend that
you use the `PRRTE DVM configurator <configurator.html>`_ for the
version you are using to ensure that it is fully compatible.
Bootstrap Options
^^^^^^^^^^^^^^^^^
``ClusterName=<string> (default: "cluster")`` is the name of the cluster upon
which the DVM is executing. This is used by PRRTE to form the namespace
for the DVM daemons, which is taken as ``<clustername>-prte-dvm``.
Using different names for each of your clusters is important if you use a single
database to record information from multiple PRRTE-managed clusters.
``DVMControllerHost=<hostname>`` is the host upon which the DVM controller
will be executing. The ``prted`` that finds itself booting onto this host
will declare itself to be the system controller and will initialize itself
accordingly.
``DVMControllerPort=<number> (default: 7817)`` is the TCP port upon which the
DVM controller will be listening for connections from its ``prted`` daemons
on the remaining system nodes.
``PRTEDPort=<number (default: 7818)`` is the TCP port upon which each
``prted`` daemon will be listening for connections from its peer daemons
on the other system nodes.
``DVMNodes=<regex of DVM nodes> (default: none)`` provides a regular expression
identifying the nodes that upon which user applications can run. IP addresses can
be provided in place of hostnames if desired.The regular expression can consist of
a simple comma-delimited list of hostnames, or a comma-delimited list of hostname
ranges (e.g., "linux0,linux[2-10]"), or a PMIx "native" regular expression.
Operational Options
^^^^^^^^^^^^^^^^^^^
``DVMTempDir=<path> (default: /tmp)`` is the temporary directory that the
DVM daemons and controller are to use as the base for their session directories.
Working files/directories for the DVM will be placed under this location.
``SessionTmpDir=<path> (default: DVMTempDir)`` is the temporary directory that
the DVM daemons are to use as the base for session directories for all
application sessions. Working files for each session will be placed under
this location, separated out into a directory for each session.
Logging Options
^^^^^^^^^^^^^^^
``ControllerLogJobState=<true|false> (default: false)`` directs the DVM
controller to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
``ControllerLogProcState=<true|false> (default: false)`` directs the DVM
controller to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
``ControllerLogPath=<path> (default: DVMTempDir)`` is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the ``DVMTempDir`` location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as ``prtectrlr-<hostname>-log<``.
``PRTEDLogJobState=<true|false> (default: false)`` directs each ``prted``
in the DVM to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
``PRTEDLogProcState=<true|false> (default: false)`` directs each ``prted``
in the DVM to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
``PRRTEDLogPath=<path> (default: DVMTempDir)`` is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the ``DVMTempDir`` location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as ``prted-<hostname>-log<``.
Configurator Tool
-----------------
The `PRRTE configuration tool <configurator.html>`_ contains all the supported options in an
easy-to-use form. Once you have filled out the desired entries, the
"submit" button will show the resulting configuration file on the
browser window |mdash| a simple "copy/paste" operation into your target
configuration file will yield the final result.

View File

@@ -0,0 +1,79 @@
Contributing to PRRTE
=====================
Open source contributions
-------------------------
All code contributions are submitted as pull requests on the `PRRTE
GitHub repository <https://github.com/openpmix/prrte/>`_.
.. important:: All commits must include a ``Signed-off-by:`` line,
indicating the submitter's agreement to the :ref:`PRRTE
Contributor's Declaration
<contributing-contributors-declaration-label>`.
.. _contributing-contributors-declaration-label:
Contributor's Declaration
^^^^^^^^^^^^^^^^^^^^^^^^^
In order to ensure that we can keep distributing PRRTE under our
:doc:`open source license </license>`, we need to ensure that
all contributions are compatible with that license. Put differently:
we need to have an established intellectual property pedigree of the
code in PRRTE. This means being able to ensure that all code
included in PRRTE is free, open source, and able to be distributed
under :doc:`the BSD license </license>`.
PRRTE has therefore adopted requirements based on the signed-off-by
process as described in Section 11 of the Linux kernel document on
`Submitting Patches
<https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin>`_.
Each proposed contribution to the PRRTE code base must include the
text ``Signed-off-by:`` followed by the contributor's name and email
address. This is a developer's certification that he or she has the
right to submit the patch for inclusion into the project, and
indicates agreement to the Developer's Certificate of Origin:
By making a contribution to this project, I certify that:
#. The contribution was created in whole or in part by me and I
have the right to submit it under the :doc:`PRRTE open
source license </license>`; or
#. The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part by
me, under the :doc:`PRRTE open source license
</license>` (unless I am permitted to submit under a
different license); or
#. The contribution was provided directly to me by some other
person who certified (1) or (2) and I have not modified it.
#. I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off)
is maintained indefinitely and may be redistributed consistent
with this project and the open source license(s) involved.
Proposed contributions failing to include the ``Signed-off-by:``
certification will not be accepted into any PRRTE code
repository. The community reserves the right to revert any commit
inadvertently made without the required certification.
.. note:: This policy prevents a situation where intellectual property
gets into the PRRTE code base and then someone later
claims that we owe them money for it. PRRTE is a free,
open source code base. We intend it to remain that way.
If you have not already done so, please ensure that *every* commit in
your pull request contains the ``Signed-off-by:`` line.
.. admonition:: Pro tip
:class: tip
You can use the ``-s`` flag to the ``git commit`` command (i.e.,
``git commit -s ...``) to automatically add the appropriate
``Signed-off-by:`` line to your commit message.

View File

@@ -0,0 +1,59 @@
GitHub, Git, and related topics
===============================
GitHub
------
PRRTE's Git repositories are `hosted at GitHub
<https://github.com/openpmix/prrte>`_.
#. First, you will need a Git client. We recommend getting the latest
version available. If you do not have the command ``git`` in your
path, you will likely need to download and install Git.
#. `prrte <https://github.com/openpmix/prrte/>`_ is the main PRRTE
repository where most active development is done. Git clone this
repository. Note that the use of the ``--recursive`` CLI option is
necessary because PRRTE uses Git submodules::
shell$ git clone --recursive https://github.com/openpmix/prrte.git
Note that Git is natively capable of using many forms of web
proxies. If your network setup requires the user of a web proxy,
`consult the Git documentation for more details
<https://git-scm.com/>`_.
Git commits: open source / contributor's declaration
----------------------------------------------------
In order to remain open source, all new commits to the PRRTE
repository must include a ``Signed-off-by:`` line, indicating the
submitter's agreement to the :ref:`PRRTE Contributor's Declaration
<contributing-contributors-declaration-label>`.
.. tip:: You can use the ``-s`` option to ``git commit`` to
automatically add the ``Signed-off-by:`` line to your commit
message.
.. _git-github-branch-scheme-label:
Git branch scheme
-----------------
Generally, PRRTE has two types of branches in its Git repository:
#. ``main``:
* All active development occurs on the ``main`` branch (new features,
bug fixes, etc.).
#. Release branches of the form ``vMAJOR.MINOR.x`` (e.g., ``v4.0.x``,
``v4.1.x``, ``v5.0.x``).
* The ``.x`` suffix indicates that this branch is used to create
all releases in the PRRTE vMAJOR.MINOR series.
* Periodically, the PRRTE community will make a new release
branch, typically from ``main``.
* A Git tag of the form ``vMAJOR.MINOR.RELEASE`` is used to
indicate the specific commit on a release branch from where
official PRRTE release tarball was created (e.g., ``v4.1.0``,
``v4.1.1``, ``v4.1.2``, etc.).

View File

@@ -0,0 +1,319 @@
.. _developers-installing-autotools-label:
Manually installing the GNU Autootools
======================================
There is enough detail in building the GNU Autotools that it warrants
its own section.
.. note:: As noted above, you only need to read/care about this
section if you are building PRRTE from a Git clone. End
users installing an PRRTE distribution tarball do *not*
need to have the GNU Autotools installed.
Use a package manager
---------------------
It is recommended that you use your Linux distribution's package
manager, or Homebrew or MacPorts on macOS to install recent versions
of GNU Autoconf, Automake, and Libtool.
If you cannot, keep reading in this section to see how to build and
install these applications manually (i.e., download the source from
the internet and build/install it yourself).
Autotools versions
------------------
The following tools are required for developers to compile PRRTE
from its repository sources (users who download PRRTE tarballs do
not need these tools - they are only required for developers working
on the internals of PRRTE itself):
.. list-table::
:header-rows: 1
* - Software package
- Notes
- URL
* - GNU m4
- See version chart below
- https://ftp.gnu.org/gnu/m4/
* - GNU Autoconf
- See version chart below
- https://ftp.gnu.org/gnu/autoconf/
* - GNU Automake
- See version chart below
- https://ftp.gnu.org/gnu/automake/
* - GNU Libtool
- See version chart below
- https://ftp.gnu.org/gnu/libtool/
The table below lists the versions that are used to make nightly
snapshot and official release PRRTE tarballs. Other versions of the
tools *may* work for some (but almost certainly not all) platforms;
the ones listed below are the versions that we know work across an
extremely wide variety of platforms and environments.
To strengthen the above point: the core PRRTE developers typically
use very, very recent versions of the GNU tools. There are known bugs
in older versions of the GNU tools that PRRTE no longer compensates
for (it seemed senseless to indefinitely support patches for ancient
versions of Autoconf, for example).
.. warning:: You **will** have problems if you do not use recent
versions of the GNU Autotools.
That being said, ``autogen.pl`` and ``configure.ac`` scripts tend to
be a bit lenient and enforce slightly older minimum versions than the
ones listed below. This is because such older versions still make
usable PRRTE builds on many platforms - especially Linux on x86_64
with GNU compilers - and are convenient for developers whose Linux
distribution may not have as recent as the versions listed below (but are
recent enough to produce a working version for their platform).
To be clear: the versions listed below are required to support a wide
variety of platforms and environments, and are used to make nightly
and official release tarballs. When building PRRTE, YMMV when using
versions older than those listed below |mdash| especially if you are
not building on Linux x86_64 with the GNU compilers.
Using older versions is unsupported. If you run into problems, upgrade
to at least the versions listed below.
.. note:: You may need to scroll right in the following table.
.. admonition:: PRRTE Docs TODO
:class: error
The table below is almost certainly wrong; it has all the values
from Open MPI. Need to update the table below with the appropriate
values for PRRTE.
.. list-table::
:header-rows: 1
* - PRRTE
- M4
- Autoconf
- Automake
- Libtool
- Flex
- Sphinx
* - v1.0.x
- NA
- 2.58 - 2.59
- 1.7 - 1.9.6
- 1.5.16 - 1.5.22
- 2.5.4
- NA
* - v1.1.x
- NA
- 2.59
- 1.9.6
- 1.5.16 - 1.5.22
- 2.5.4
- NA
* - v1.2.x
- NA
- 2.59
- 1.9.6
- 1.5.22 - 2.1a
- 2.5.4
- NA
* - v1.3.x
- 1.4.11
- 2.63
- 1.10.1
- 2.2.6b
- 2.5.4
- NA
* - v1.4.x
- 1.4.11
- 2.63
- 1.10.3
- 2.2.6b
- 2.5.4
- NA
* - v1.5.x for x=0-4
- 1.4.13
- 2.65
- 1.11.1
- 2.2.6b
- 2.5.4
- NA
* - v1.5.x for x>=5
- 1.4.16
- 2.68
- 1.11.3
- 2.4.2
- 2.5.35
- NA
* - v1.6.x
- 1.4.16
- 2.68
- 1.11.3
- 2.4.2
- 2.5.35
- NA
* - v1.7.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v1.8.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v1.10.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v2.0.x through v4.y
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- NA
* - v5.0.x
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- 4.2.0
* - Git main
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- 4.2.0
Checking your versions
----------------------
You can check what versions of the Autotools you have installed with
the following:
.. code-block:: sh
shell$ m4 --version
shell$ autoconf --version
shell$ automake --version
shell$ libtoolize --version
Installing the GNU Autotools from source
----------------------------------------
.. note:: Most operating system packaging systems (to include Homebrew
and MacPorts on MacOS) install recent-enough versions of the
GNU Autotools. You should generally only install the GNU
Autotools manually if you can't use your operating system
packaging system to install them for you.
The GNU Autotools sources can be can be downloaded from:
* https://ftp.gnu.org/gnu/autoconf/
* https://ftp.gnu.org/gnu/automake/
* https://ftp.gnu.org/gnu/libtool/
* And if you need it: https://ftp.gnu.org/gnu/m4/
It is certainly easiest to download/build/install all four of these
tools together. But note that PRRTE has no specific m4
requirements; it is only listed here because Autoconf requires minimum
versions of GNU m4. Hence, you may or may not *need* to actually
install a new version of GNU m4. That being said, if you are confused
or don't know, just install the latest GNU m4 with the rest of the GNU
Autotools and everything will work out fine.
Build and install ordering
--------------------------
You must build and install the GNU Autotools in the following order:
#. m4
#. Autoconf
#. Automake
#. Libtool
.. important:: You *must* install the last three tools (Autoconf,
Automake, Libtool) into the same prefix directory.
These three tools are somewhat inter-related, and if
they're going to be used together, they *must* share a
common installation prefix.
You can install m4 anywhere as long as it can be found in the path;
it may be convenient to install it in the same prefix as the other
three. Or you can use any recent-enough m4 that is in your path.
.. warning:: It is *strongly* encouraged that you do **not** install
your new versions over the OS-installed versions. This could cause
other things on your system to break. Instead, install into
``$HOME/local``, or ``/usr/local``, or wherever else you tend to
install "local" kinds of software.
In doing so, be sure to prefix your ``$PATH`` with the directory
where they are installed. For example, if you install into
``$HOME/local``, you may want to edit your shell startup file
(``.bashrc``, ``.cshrc``, ``.tcshrc``, etc.) to have something
like
.. code-block:: sh
# For bash/sh:
export PATH=$HOME/local/bin:$PATH
# For csh/tcsh:
set path = ($HOME/local/bin $path)
Ensure to set your ``$PATH`` *before* you configure/build/install
the four packages.
All four packages require two simple commands to build and
install:
.. code-block:: sh
shell$ cd M4_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. important:: If you are using a shell that does not automatically
re-index the ``$PATH`` (e.g., the ``csh`` or ``tcsh``
shells), be sure to run the ``rehash`` command before
you install the next package so that the executables
that were just installed can be found by the next
package.
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd AUTOCONF_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd AUTOMAKE_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd LIBTOOL_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install

View File

@@ -0,0 +1,18 @@
Developer's guide
=================
This section is here for those who are building/exploring the
internals of PRRTE in its source code form, most likely through a
developer's tree (i.e., a Git clone).
If you are simply *using* PRRTE, you probably don't need to read this
section.
.. toctree::
:maxdepth: 1
prerequisites.rst
git-github
gnu-autotools
sphinx
rst-for-markdown-expats.rst

View File

@@ -0,0 +1,132 @@
Prerequisites
=============
Compilers
---------
Although it should probably be assumed, you'll need a C compiler that
supports C99.
GNU Autotools
-------------
When building PRRTE from its repository sources, the GNU Autotools
must be installed (i.e., `GNU Autoconf
<https://www.gnu.org/software/autoconf/>`_, `GNU Automake
<https://www.gnu.org/software/automake/>`_, and `GNU Libtool
<https://www.gnu.org/software/libtool/>`_).
.. list-table::
:header-rows: 1
:widths: 10 10
* - Tool
- Minimum version
* - Autoconf
- |autoconf_min_version|
* - Automake
- |automake_min_version|
* - Libtool
- |libtool_min_version|
.. note:: The GNU Autotools are *not* required when building PRRTE
from distribution tarballs. PRRTE distribution tarballs
are bootstrapped such that end-users do not need to have the
GNU Autotools installed.
You can generally install GNU Autoconf, Automake, and Libtool via your
Linux distribution native package system, or via Homebrew or MacPorts
on MacOS. This usually "just works."
If you run into problems with the GNU Autotools, or need to download /
build them manually, see the :ref:`how to build and install GNU
Autotools section <developers-installing-autotools-label>` for much
more detail.
Perl
----
PRRTE still uses Perl for a few of its build scripts (most notably,
``autogen.pl``).
Generally speaking, any recent-ish release of Perl 5 should be
sufficient to correctly execute PRRTE's Perl scripts.
Flex
----
Minimum supported version: |flex_min_version|.
`Flex <https://github.com/westes/flex>`_ is used during the
compilation of a developer's checkout (it is not used to build
official distribution tarballs). Other flavors of lex are *not*
supported: given the choice of making parsing code portable between
all flavors of lex and doing more interesting work on PRRTE, we
greatly prefer the latter.
Note that no testing has been performed to see what the minimum
version of Flex is required by PRRTE. We suggest that you use
v2.5.35 at the earliest.
For now, PRRTE will allow developer builds with Flex |flex_min_version|. This
is primarily motivated by the fact that RedHat/CentOS 5 ships with
Flex 2.5.4. It is likely that someday PRRTE developer builds will
require Flex version >=2.5.35.
Note that the ``flex``-generated code generates some compiler warnings
on some platforms, but the warnings do not seem to be consistent or
uniform on all platforms, compilers, and flex versions. As such, we
have done little to try to remove those warnings.
If you do not have Flex installed and cannot easily install it via
your operating system's packaging system (to include Homebrew or
MacPorts on MacOS), see `the Flex Github repository
<https://github.com/westes/flex>`_.
Sphinx (and therefore Python)
-----------------------------
`Sphinx <https://www.sphinx-doc.org/>`_ is a Python-based tool used to
generate both the HTML version of the documentation (that you are
reading right now) and the nroff man pages.
Official PRRTE distribution tarballs contain pre-built HTML
documentation and man pages. This means that -- similar to the GNU
Autotools -- end users do not need to have Sphinx installed, but will
still have both the HTML documentation and man pages installed as part
of the normal configure / build / install process.
However, the HTML documentation and man pages are *not* stored in PRRTE's
Git repository; only the ReStructred Text source code of the
documentation is in the Git repository. Hence, if you are building
PRRTE from a Git clone, you will need Sphinx (and some Python
modules) in order to build the HTML documentation and man pages.
.. important:: Most systems do not have Sphinx and/or the required
Python modules installed by default. :ref:`See the
Installing Sphinx section
<developers-installing-sphinx-label>` for details on
how to install Sphinx and the required Python modules.
If ``configure`` is able to find Sphinx and the required Python
modules, it will automatically generate the HTML documentation and man
pages during the normal build procedure (i.e., during ``make all``).
If ``configure`` is *not* able to find Sphinx and/or the required
Python modules, it will simply skip building the documentation.
.. note:: If you have built/installed PRRTE from a Git clone and
unexpectedly did not have the man pages installed, it is
likely that you do not have Sphinx and/or the required
Python modules available.
:ref:`See the Installing Sphinx section
<developers-installing-sphinx-label>` for details on how
to install Sphinx and the required Python modules.
.. important:: ``make dist`` will fail if ``configure`` did not find
Sphinx and/or the required Python modules.
Specifically: if ``make dist`` is not able to generate
the most up-to-date HTML documentation and man pages,
you cannot build a distribution tarball. **This is an
intentional design decision.**

View File

@@ -0,0 +1,404 @@
.. _developers-rst-for-markdown-expats:
ReStructured Text for those who know Markdown
=============================================
You can think of RST as "Markdown, but much better". Meaning:
#. RST is basically just as simple as Markdown
#. But RST is both more precise, and has more available formatting
constructs (without getting crazy complicated)
The full Sphinx / RST documentation is available here:
https://www.sphinx-doc.org/en/master/index.html
If you're familiar with Markdown, the following sections contain some
tips to get you started in RST.
Whitespace and indenting
------------------------
* MD: Whitespace and indenting generally doesn't matter in most
cases. It does matter with bullets and sub bullets, but the rules
get pretty weird, and vary between different Markdown renderers.
* RST: **Indenting matters**. A lot. Just like Python. In
general, you indent all RST text to keep it within the same level.
For example, all this text would be a single paragraph
**Blank lines also matter**. A lot. You use blank lines to
delimit sections within an indenting level. For example, the
blank line before this paragraph denotes a paragraph break.
.. note:: RST was created by the Python community. Hence,
whitespace is quite important.
* Indenting matters
* Blank lines between content matter
Using a blank line and outdenting indicates the end of the previous
item. For example, this paragraph is not part of the MD/RST
bulleted list.
Fixed width font
----------------
* MD: Use single quotes:
.. code-block:: md
`hello world`
* RST: Use a pair of single quotes:
.. code-block:: rst
``hello world``
Italics
-------
* MD: ``*hello world*`` or ``_hello world_``
* RST: ``*hello world*``
Boldface
--------
* MD: ``**hello world**``
* RST: Same as MD
Chapter and section delimiters
------------------------------
* MD: Either use one or more pound signs (#, ##, ###) to the left of
the line of text, or underline the line of text with pound signs
* RST: Have a single line of text, underlined by non-ASCII
characters.
* The length of the underlying *must* be at least as long as the
line of text
* Which non-ASCII character is used for the underlying does not
matter, but the order in which they are used denotes chapters
/ sections / subsections / etc.
In these PRRTE docs, the sequence of underline characters we use
are:
.. code-block:: rst
Chapter 1: hello world
======================
.. code-block:: rst
Section 1: hello world
----------------------
.. code-block:: rst
Subsection 1: hello world
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: rst
Subsubsection 1: hello world
++++++++++++++++++++++++++++
Meaning: underlines made of ``=`` denotes chapters, underlines
made of ``-`` denotes sections, underlines made of ``^`` denotes
subsections, and underlines made of ``+`` denote subsubsections.
Multi-line code/fixed-width font
--------------------------------
* MD: Use three single quotes to delimit blocks of text. Optionally
include a token keyword to denote the syntax highlighting to use
inside that block.
.. code-block:: md
```c
int main() { printf("Hello world\n"); return 0 }
```
* RST: Use ``.. code-block:: KEYWORD`` to start a section of code.
.. code-block:: rst
.. code-block:: c
int main() { printf("Hello world\n"); return 0 }
* KEYWORD indicates which syntax highlighting to use (e.g., ``c``,
``c++`` ``make``, ``sh``, ``ini``, ``Fortran``, ``diff``,
``python``, ``java``, ``rst``, ... etc.).
* KEYWORD can be omitted if no specific highlighting is to be
used.
* There *MUST* be a blank line after the ``code-block`` line.
* The lines in the block must be indented to the same column as the
first ``c`` in ``code-block``. For example:
.. code-block:: rst
.. code-block:: sh
shell$ tar xf prte-<version>.tar.bz2
shell$ cd prte-<version>
shell$ ./configure --prefix=<path> |& tee config.out
Note that the code block will be rendered at the same level as
where the first ``.`` of ``.. code-block::`` starts. In this
case, the example code block will be rendered in the bulleted
item.
Whereas this parargraph and code block will be outside of the
above bulleted list:
.. code-block:: sh
shell$ tar xf prte-<version>.tar.bz2
shell$ cd prte-<version>
shell$ ./configure --prefix=<path> |& tee config.out
# Fun note: the code-block can contain blank lines.
The code-block is terminated by a blank line and then outdent back
to the same level as the first ``.`` in ``.. code-block::``.
Un-numbered bullets
-------------------
* MD: Start lines with ``*`` or ``-``
* RST: Start lines with ``*``. You can wrap lines at the same
indenting level to make paragraphs in the same bullet.
Having a blank line and then more text at the same indenting level
makes another paragraph in the same bullet. You even put other
directives in this same indenting level.
* For example, you can start a sub bullet.
This text is the next paragraph in the same sub bullet.
.. code-block:: none
This is a verbatim code block within this same sub bullet.
More about code-blocks below.
This is the next paragraph (after the code block) in the same
sub bullet.
* If you start a new bullet, that terminates the previous bullet.
* You **MUST** put blank lines between bullets!
Numbered bullets:
-----------------
* MD: Start lines with ``#``
* RST: Start lines with ``#.``
.. important:: Yes, the trailing ``.`` is important
For example:
.. code-block:: rst
#. Item number 1
#. The second item
#. A third item
All the same rules for indentation apply as described above.
Comments
--------
* MD: Enclose content in ``<!--`` and ``-->`` (i.e., HTML comments,
but they are included in the output)
* RST: Start a line with two periods and a space.
For example, the following block is a comment, and will not be
included in the output:
.. code-block:: rst
.. Hello world. This is a comment. This whole block is a
comment. You can leave it here in the final document, and it
will not be included in the rendered output.
Your comment can even include blank lines. You terminate a
comment -- just like most other things in RST -- by a blank
line and then outdenting back out to the same column as the
first ".".
This line is no longer part of the comment.
Including files
---------------
* MD: You cannot include files in Markdown.
* RST: Use the ``.. include:: FILENAME`` directive. For example:
.. code-block:: rst
.. include:: features-extensions.rst
.. include:: features-java.rst
Those directives include those 2 files right here in this RST file.
.. important:: Chapter/section/subsection delimiters will be
continued in those files as part of rendering this
file.
Hyperlinks to URLs
------------------
* MD:
.. code-block:: md
[this is the link text](https://example.com/)
* RST:
.. code-block:: rst
`this is the link text <https://example.com/>`_
.. important:: Yes, the trailing underscore in RST is important.
It's a little weird, but you'll cope.
Hyperlinks to anchors
---------------------
* MD: I forget offhand how to make anchors and links to them in MD.
* RST: Use the ``:ref:`` directive.
Make an anchor like this:
.. code-block:: rst
.. _ANCHOR_NAME:
It *must* start with and underscore and end with a colon.
I've typically used anchor names that either begin with ``label-``
or end in ``-label`` to make it blatantly obvious that it's a
label. For example:
.. code-block:: rst
.. _building-and-installing-section-label:
Then you can use the ``:ref:`` directive:
.. code-block:: rst
be sure to see :ref:`the VPATH build section
<building-and-installing-section-label>`.
Hyperlinks to other (RST) pages
-------------------------------
* MD:
.. code-block:: md
[link text](page_name)
* RST: Use the ``:doc:`` directive.
General format:
.. code-block:: rst
:doc:`link text <PAGE_PATH>`
For example:
.. code-block:: rst
You should read :doc:`the Developer's Guide </developers>`.
The page path is relative to the ``docs`` dir in the PRRTE git tree.
Macros
------
* MD: There are no macros in Markdown.
* RST: We have defined a few PRRTE-specific macros in RST. You can
insert these macros anywhere in RST content text.
* ``|ompi_ver|`` is the full PRRTE version number, including
alpha/beta/rc/greek denotation. For example ``5.0.0rc1``.
* ``|ompi_series|`` is the major/minor PRRTE version, e.g.,
``5.0.x``.
.. important:: Think twice about hard-coding the PRRTE version
number or series when referring to the current
version or series. It can be appropriate to
hard-code an "x.y.0" version to denote a
generational epoch, but in most other cases, you
probably want to use one of the macros.
* ``|mdash|`` is a unicode long dash, an "em" dash. Use it instead
of ``--``.
* ``|rarrow|`` is a unicode right arrow. Use it instead of ``->``
or ``-->``.
Brightly-colored boxes
----------------------
* MD: There are no brightly-colored boxes in MD.
* RST: You can use various directives to make brightly-colored
"note" boxes (Called admonitions) in RST. For example:
.. important:: a green box with a "!" icon
Standard indenting rules apply for the content in the box. You
can have multiple lines and multiple paragraphs, for example.
Yippee.
* You can even have bullets.
.. code-block:: none
You can even have code blocks inside the bullet inside the
caution box.
* All the standard indenting rules apply.
.. hint:: a green box with a "!" icon
.. note:: a blue box with a "!" icon
.. caution:: an orange box with a "!" icon
.. attention:: an orange box with a "!" icon
.. warning:: an orange box with a "!" icon
.. error:: a red box with a "!" icon
.. danger:: a red box with a "!" icon
.. admonition:: Custom title
:class: tip
You can name this box whatever you want:
.. code-block:: rst
.. admonition:: Custom title
:class: tip
Content of your box here.
Custom text for this custom admonition. Note that the ``:class: <type>``
will change the coloring to the color for the basic admonition of that
type. E.g., ``:class: tip`` makes the box be green.

View File

@@ -0,0 +1,236 @@
.. _developers-installing-sphinx-label:
Installing and running Sphinx (building the PRRTE docs)
=======================================================
As with all content in the Developer's Guide, this section is only
relevant for developers who work in the PRRTE code base itself.
End users who install a binary PRRTE package or build from an
official PRRTE distribution tarball do not need to have Sphinx
installed.
Installing Python
-----------------
The `Sphinx tool <https://www.sphinx-doc.org/>`_ is written in Python,
and therefore needs to have Python available. As of late 2022, Sphinx
requires Python >= v3.7.
This documentation does not contain detailed instructions for
installing a Python version sufficient for using Sphinx. Consult your
local OS documentation for how to obtain Python >= v3.7, or search the
internet for further information.
Installing Sphinx
-----------------
`The Sphinx documentation
<https://www.sphinx-doc.org/en/master/usage/installation.html>`_
recommends installing Sphinx (and its required Python dependencies)
via ``pip``, which typically requires connectivity to the general
internet.
.. note:: If you are running on MacOS, you may be tempted to use
Homebrew or MacPorts to install Sphinx. The Sphinx documentation
recommends **against** this. Instead, you should use ``pip`` to
install Sphinx.
There are three general ways to install Sphinx; you only need one of
them.
Install Sphinx in a Python virtual environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The preferred method of installing Sphinx for PRRTE documentation
development is to install Sphinx in a Python virtual environment.
This places Sphinx in a sandbox that will not conflict with other
``pip``-installed Python modules. This example installs Sphinx and
other Python modules in the ``ompi-docs-venv`` tree under your PRRTE
Git clone directory:
.. code-block:: sh
# Create the Python virtual environment
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ python3 -m venv ompi-docs-venv
# Or: python3 -m virtualenv ompi-docs-venv
# Or: virtualenv --python=python3 ompi-docs-venv
# Activate the virtual environment
shell$ . ./ompi-docs-venv/bin/activate
# Notice that the shell prompt changes
# Now install the required Python modules
(ompi-docs-venv) shell$ pip3 install -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
Note that sourcing the ``activate`` script will change your prompt to
put the name of your virtual environment directory at the front, just
as a visual reminder that you are operating in a Python virtual
environment. You can run ``deactivate`` to leave the virtual
environment.
.. important:: You will need to source the ``activate`` script to put
Sphinx in your ``PATH`` *before* running ``configure``.
Install Sphinx globally
^^^^^^^^^^^^^^^^^^^^^^^
If Python virtual environments are not desirable on your system, you
can install Sphinx globally on your system (you may need to run with
root privileges):
.. code-block:: sh
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ pip3 install -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.
This will likely install the ``sphinx-build`` executable in a location
that is already in your ``PATH``. If the location is not already in
your ``PATH``, then you need to add it to your ``PATH``.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
Install Sphinx locally
^^^^^^^^^^^^^^^^^^^^^^
If you cannot or do not want to install Sphinx globally on your
system, the following will install Sphinx somewhere under your
``$HOME``. It is the same ``pip`` command as shown above, but with
the addition of the ``--user`` flag (you should not need ``root``
permissions to run this command):
.. code-block:: sh
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ pip3 install --user -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.
You will likely need to find the location where ``sphinx-build`` was
installed and add it to your ``PATH``.
.. note:: On MacOS, look for ``sphinx-build`` under
``$HOME/Library/Python/VERSION/bin`` (where ``VERSION`` is
the version number of Python). Or it may have installed to
``/usr/local/bin/sphinx-build``. YMMV.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
Running Sphinx
--------------
PRRTE's build environment is setup to invoke Sphinx automatically;
you should not need to invoke Sphinx manually.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
As long as ``configure`` found Sphinx, ``make`` will invoke Sphinx to
build the documentation. You can also run ``make`` directly in the
``docs/`` directory to build *just* the docs and skip building the
rest of the PRRTE software. This can be a huge time-saver when
iteratively writing, rendering, and viewing/proofing documentation.
.. note:: The fully-built HTML and man page docs are included in
official PRRTE distribution tarballs. Meaning: if you
download an official distribution PRRTE tarball,
the pre-built HTML and man page files are included
in the tarball.
Sphinx is a requirement for *developers* who want to build
the PRRTE docs. End users do *not* need to have Sphinx
available to build PRRTE or have its docs installed from
an official distribution tarball.
Sphinx execution time
^^^^^^^^^^^^^^^^^^^^^
Sphinx is stateful: subsequent runs can be significantly faster
because Sphinx will only re-render HTML files that have changes. This
is a nice time saver for PRRTE (e.g., if you are iterating over
writing the docs and running ``make`` to see how they rendered in
HTML).
.. caution:: Sphinx is only *somewhat* smart in its partial
re-rendering. If you change a title in an RST file, for
example, Sphinx will (by default) only re-render *that*
page. The Tables of Contents / left hand navigation on
other pages may not be updated.
You can always force a full re-render via:
.. code:: sh
shell$ cd docs
shell$ rm -rf _build
shell$ make
Checking Sphinx HTML links
^^^^^^^^^^^^^^^^^^^^^^^^^^
``make linkcheck`` will invoke Sphinx's functionality to check all the
external links in the documentation:
.. code:: sh
shell$ cd docs
shell$ make linkcheck
.. important:: You will need to be on a computer that has good access
to the internet when running this command.
Viewing docs locally
^^^^^^^^^^^^^^^^^^^^
Once you have built the docs in your local Git clone, you can view
them locally in the build tree:
#. Open ``docs/_build/html/index.html`` in a browser to view the HTML
docs. For example, on MacOS, the following command opens the build
tree docs in the default web browser:
.. code:: sh
shell$ open docs/_build/html/index.html
#. Use the ``man`` command to view the Nroff files in
``docs/_build/man`` (you may need to use an absolute or relative
filename to prevent ``man`` from using its search paths). For
example:
.. code:: sh
shell$ cd docs/_build/man
shell$ man ./prterun.1
Alternatively, you can view these files in their installed locations
after running ``make install``:
#. The HTML docs are installed (by default) to
``$prefix/share/doc/prte/html``. You can use a web browser to
open the ``index.html`` in that directory to view the docs locally.
For example, on MacOS, the following command opens the installed
docs in the default web browser:
.. code:: sh
shell$ open $prefix/share/doc/prte/html/index.html
#. The man pages are installed (by default) to ``$preix/share/man``.
If your man page search path includes this location, you can invoke
commands similar to the following to see the same content that you
see in these HTML pages:
.. code:: sh
shell$ man prterun

View File

@@ -0,0 +1,9 @@
Getting help
============
The best way to report bugs, send comments, or ask questions is to
post them on the `PRRTE GitHub issue tracker
<https://github.com/openpmix/prrte/issues>`_.
When submitting questions and problems, be sure to include as much
extra information as possible.

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-cli.rst

View File

@@ -0,0 +1,4 @@
Hostfiles
=========
.. include:: /prrte-rst-content/detail-hostfiles.rst

View File

@@ -0,0 +1,19 @@
Host specification
==================
PRRTE identifies hosts on which to launch processes by:
#. A Resource Manager (RM) telling PRRTE which hosts to use
#. The user providing a hostfile (also sometimes called a "machine
file")
#. The user providing a list of hosts on the command line
The sections below describe each of these in more detail.
.. toctree::
:maxdepth: 1
rm
hostfiles
cli
relative-indexing

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-relative-indexing.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-rm.rst

View File

@@ -0,0 +1,12 @@
How Things Work
===============
This section explains how some of the functions inside
PRRTE perform their job. If you have questions about, for
example, how session directory trees work, then you will
find information on that subject here.
.. toctree::
:maxdepth: 2
session_dirs.rst

View File

@@ -0,0 +1,115 @@
.. _session-dir-detail-label:
Session Directories
===================
In general, servers, tools, and application processes all have access to their own ``session directory`` - a location where scratch files can be safely placed with a reasonable guarantee of automatic cleanup upon termination. Session directories provide a safe location (i.e., in a temporary file system and guaranteed not to conflict with other sessions/jobs/applications) for executables to use when creating scratch files such as shared memory backing files and rendezvous files. PMIx and PRRTE also provide a reasonable guarantee that any files and/or subdirectories created under the specified location will be automatically cleaned up at finalize and/or termination. In this case, ``reasonable`` means that we will do our best to remove all files and subdirectories, but cannot fully guarantee removal in situations outside of our control (e.g., being forcibly terminated via `SIGKILL`).
.. note:: In general, the host (e.g., PRRTE) is responsible for creating session
directories. In some cases, PMIx creates a limited set of session
directories if the host does not provide them - e.g., in the case of a
self-launched tool - for storing contact information. This is outlined
below.
The following attributes can be used to pass session directory information to the PMIx library:
* ``PMIX_SYSTEM_TMPDIR``: temporary directory for this system (typically ``/tmp`` for Linux systems).
The PMIx server will place tool rendezvous points and contact info in this location. In the
absence of this attribute during ``PMIx_Init`` (or the server/tool version), the PMIx library
will first look for the ``TMPDIR`` envar, then ``TEMP``, and finally ``TMP`` - if none of
those are found, the library will default to the ``/tmp`` location.
* ``PMIX_SERVER_TMPDIR``: session directory where the PMIx server will place client rendezvous
points and contact info. If not provided, the library will first look for the ``PMIX_SERVER_TMPDIR``
envar, then ``TMPDIR``, ``TEMP``, and finally ``TMP`` - if none of those are found, the
library will default to the ``/tmp`` location.
* ``PMIX_TMPDIR``: top-level temporary directory assigned to a session. Often equated to
``PMIX_SERVER_TMPDIR`` by host environments.
* ``PMIX_NSDIR``: session directory assigned to a namespace. Usually placed underneath the
``PMIX_SERVER_TMPDIR`` and given a name based on the namespace itself.
* ``PMIX_PROCDIR``: session directory assigned to an individual process. Usually placed underneath
the ``PMIX_NSDIR`` assigned to the namespace of the process, and given a string name equivalent
to the rank of the process.
* ``PMIX_LAUNCHER_RENDEZVOUS_FILE``: the full path name of a file wherein a tool shall output its
connection information - e.g., a launcher to store contact information so that a debugger
can attach to it.
* ``PMIX_TDIR_RMCLEAN``: the host environment (often known as the "resource manager" or "RM") will
cleanup the session directories. In the absence of this attribute, the PMIx library will
remove all files in any session directory it created and then remove the directory itself.
These same attributes can be used in calls to ``PMIx_Get`` by application processes to retrieve
the session directory locations for their own use.
Client Session Directories
--------------------------
The PMIx client library does not create its own session directories as it does not publish
contact information. Host daemons often create one or more session directory levels for use
by client application processes (e.g., for storing shared memory backing files) - the location
of those directories is passed to clients using the above attributes.
As the client library never creates session directories, it does not perform any cleanup of
the session directory tree.
Tool and Server Session Directories
-----------------------------------
The PMIx library utilizes appropriate session directory locations to store one or more
"rendezvous files" - i.e., files containing connection information. Note that the library does not
always create all levels of the session directory tree, although the process
itself can of course create directories as it sees fit. Only the directories that (a) are required
for generating the particular rendezvous file, and (b) do not already exist are created. Only
directories actually created by the library are cleaned up and removed upon finalization.
The following rendezvous files are provided:
* if ``PMIX_LAUNCHER_RENDEZVOUS_FILE`` is given (either via an attribute to an "init" function
or as an envar), then the specified file (including any required path elements) will be created.
* if the server is designated as a "system" server (i.e., the ``PMIX_SERVER_SYSTEM_SUPPORT`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sys.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
* if the server is designated as a "session" server (i.e., the ``PMIX_SERVER_SESSION_SUPPORT`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sys.<hostname>" will be
created in the ``PMIX_SERVER_TMPDIR`` location.
* if the server declares that it will support tool connections (i.e., the ``PMIX_SERVER_TOOL_SUPPORT``
attribute was provided to ``PMIx_server_init``), then the following rendezvous files will be created
under the ``PMIX_SERVER_TMPDIR`` location:
* a PID file: "pmix.<hostname>.<pid>"
* a namespace file using the nspace of the server: "pmix.<hostname>.<nspace>"
* if the server is designated as a "scheduler" (i.e., the ``PMIX_SERVER_SCHEDULER`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sched.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
* if the server is designated as a "system controller" (i.e., the ``PMIX_SERVER_SYS_CONTROLLER`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sysctrlr.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
.. note:: The above rendezvous files are additive - i.e., generating any one of the files has
no bearing on whether another file will be output. Thus, a single server could
generate anywhere from one to five (or more) rendezvous files spanning several
directory levels.
.. warning:: There is a potential conflict in rendezvous file names - e.g., if multiple processes
declare themselves to be a "session" server on the same node. The format of the
names used by PMIx are intended to support tool connection in the absence of specific
connection directives - i.e., they provide a means by which PMIx can search for and
find the rendezvous file for a particular type of process without requiring the user
to manually identify it. Thus, a tool can request connection to the "system controller"
without necessarily knowing the PID of that process and PMIx can facilitate the
connection. As a result, only one system server can be operating on a node at a time.
This is also (independently) true for schedulers and system controllers.

View File

@@ -0,0 +1,44 @@
PMIx Reference Runtime Environment (PRRTE) |prte_ver|
=====================================================
The project is formally referred to in documentation by "PRRTE", and
the GitHub repository is ``prrte``.
.. note:: We have found that most users do not like typing the two
consecutive ``r`` letters in the name. Hence, all of the
internal API symbols, environment variables, MCA frameworks,
and CLI executables all use the abbreviated ``prte`` (one
``r``, not two) for convenience.
Documentation locations
=======================
This documentation can be found in the following locations:
* On the web: https://docs.prrte.org/
* In the tarball: ``docs/_build/html/index.html``
* Installed: ``$prefix/share/doc/prrte/html/index.html``
Table of contents
=================
.. toctree::
:maxdepth: 2
:numbered:
quickstart
release-notes
getting-help
install
configuration
how-things-work/index
hosts/index
placement/index
notifications
session-directory
developers/index
contributing
license
man/index
versions
news/index

View File

@@ -0,0 +1,92 @@
Installing PRRTE
================
For More Information
--------------------
This file is a *very* short overview of building and installing the
PMIx Reference RunTime Environment (PRRTE). More information is
available `in the FAQ section on the PRRTE web site
<https://github.com/openpmix/prrte>`_.
Minimum PMIx version
--------------------
The ``configure`` script in PRRTE |prte_ver| must be able to find an
OpenPMIx installation that is |pmix_min_version| or higher. If
``configure`` cannot find a suitable OpenPMIx version, it will abort
with an error.
If OpenPMIx cannot be found in default preprocessor and linker search
paths, you can specify the ``--with-pmix=DIR`` CLI option to tell
``configure`` where to find it.
Developer Builds
----------------
If you have checked out a DEVELOPER'S COPY of PRRTE (i.e., you checked
out from Git), you should read the :doc:`Developer's Guide
</developers/index>` section before attempting to build PRRTE. You
must then run:
.. code-block:: sh
shell$ ./autogen.pl
You will need very recent versions of GNU Autoconf, Automake, and
Libtool. If ``autogen.pl`` fails, read the :doc:`Developer's Guide
</developers/index>`. If anything else fails, read the
:doc:`Developer's Guide </developers/index>`. Finally, we suggest
reading the :doc:`Developer's Guide </developers/index>`.
.. note:: Developer's copies of PRRTE typically include a large
performance penalty at run-time because of extra debugging
overhead.
User Builds
-----------
Building PRRTE is typically a combination of running ``configure``
and ``make``. Execute the following commands to install the PRRTE
system from within the directory at the top of the tree:
.. code-block:: sh
shell$ ./configure --prefix=/where/to/install
[...lots of output...]
shell$ make all install
If you need special access to install, then you can execute ``make
all`` as a user with write permissions in the build tree, and a
separate ``make install`` as a user with write permissions to the
install tree.
Compiling support for specific compilers and environments may require
additional command line flags when running ``configure``. Note that
VPATH builds are fully supported. For example:
.. code-block:: sh
shell$ tar xf prrte-X.Y.Z.tar.gz
shell$ cd prrte-X.Y.Z
shell$ mkdir build
shell$ cd build
shell$ ../configure ...your options...
[...lots of output...]
shell$ make all install
Parallel builds are also supported (although some versions of ``make``,
such as GNU make, will only use the first target listed on the command
line when executable parallel builds). For example (assume GNU make):
.. code-block:: sh
shell$ make -j 4 all
[...lots of output...]
shell$ make install
Parallel make is generally only helpful in the build phase; the
installation process is mostly serial and does not benefit much from
parallel make.

View File

@@ -0,0 +1,5 @@
License
=========
.. literalinclude:: ../LICENSE
:language: text

View File

@@ -0,0 +1,21 @@
PRRTE manual pages
==================
All of the content in this section is also installed as individual
manual ("man") pages in a PRRTE installation. If your man page search
path includes the location where PRRTE installed its man pages (which
defaults to ``$prefix/share/man``), you can invoke commands similar to
the following to see the same content that you see in these HTML
pages:
.. code:: sh
shell$ man prterun
PRRTE man pages, by section:
.. toctree::
:maxdepth: 1
man1/index
man5/index

View File

@@ -0,0 +1,12 @@
Commands (section 1)
====================
.. toctree::
:maxdepth: 1
prte.1.rst
prte_info.1.rst
prted.1.rst
prterun.1.rst
prun.1.rst
pterm.1.rst

View File

@@ -0,0 +1,29 @@
.. _man1-prte:
prte
====
prte |mdash| instantiate an instance of PRRTE DVM
SYNOPSIS
--------
.. code:: sh
shell$ prte ...options...
DESCRIPTION
-----------
``prte`` instantiates an instance of the PMIx Reference Run Time
Environment (PRRTE) distributed virtual machine (DVM).
Extensive help documentation for this command is provided through
``prte --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prterun(1) <man1-prterun>`

View File

@@ -0,0 +1,29 @@
.. _man1-prte_info:
prte_info
=========
prte_info |mdash| Provide detailed information on your PRRTE installation
SYNOPSIS
--------
.. code:: sh
prte_info ...options...
DESCRIPTION
-----------
``prte_info`` provide detailed information on your PMIx Reference Run
Time (PRRTE) installation.
Extensive help documentation for this command is provided through
``prte_info --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,29 @@
.. _man1-prted:
prted
=====
prted |mdash| helper daemon for PRRTE
SYNOPSIS
--------
.. code:: sh
shell$ prted ...options...
DESCRIPTION
-----------
``prted`` is the back end helper daemon for PMIx Reference Runtime
Environment (PRRTE).
Extensive help documentation for this command is provided through
``prted --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,49 @@
.. _man1-prterun:
prterun
========
prterun |mdash| launch an application with a default DVM
SYNOPSIS
--------
.. code:: sh
shell$ prterun ...options...
DESCRIPTION
-----------
``prterun`` submits a job to the PMIx Reference Runtime Environment
(PRRTE). A default set of distributed virtual
machine (DVM) options are used; use :ref:`prun(1) <man1-prun>` if you
wish to utilize specific DVM options.
Much of this same help documentation for this command is also provided
through ``prun --help [topic]``.
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.
COMMAND LINE OPTIONS
--------------------
.. TODO - add in all supported CLI
DEPRECATED COMMAND LINE OPTIONS
-------------------------------
.. TODO - check for deprecated CLI and add those here
EXIT STATUS
-----------
Description of the various exit statuses of this command.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,44 @@
.. _man1-prun:
prun
=====
prun |mdash| launch an application
SYNOPSIS
--------
.. code:: sh
shell$ prun ...options...
DESCRIPTION
-----------
``prun`` submits a job to the PMIx Reference Runtime Environment
(PRRTE). The user has control over various distributed virtual
machine (DVM) options.
Much of this same help documentation for this command is also provided
through ``prun --help [topic]``.
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.
COMMAND LINE OPTIONS
--------------------
The following command line options are supported:
.. TODO - add in all supported CLI
DEPRECATED COMMAND LINE OPTIONS
-------------------------------
.. TODO - check for deprecated CLI and add those here
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,29 @@
.. _man1-pterm:
pterm
=====
pterm |mdash| terminate an instance of the PRRTE DVM
SYNOPSIS
--------
.. code:: sh
shell$ pterm ...options...
DESCRIPTION
-----------
``pterm`` terminates an instance of the PMIx Reference Runtime
Environment (PRRTE) distributed virtual machine (DVM).
Extensive help documentation for this command is provided through
``pterm --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,7 @@
Config file manual pages (section 5)
====================================
.. toctree::
:maxdepth: 1
prte.5.rst

View File

@@ -0,0 +1,11 @@
.. _man5-prte:
prte
====
PMIx Reference Runtime Environment (PRRTE) - General information
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.

View File

@@ -0,0 +1,40 @@
.. PMIx NEWS
This page serves as a high level NEWS page which includes NEWS
from various PMIx series
News
====
This file contains the main features as well as overviews of specific
bug fixes (and other actions) for each version of PRRTE since
version 1.0.
PRRTE typically releases two separate version
series simultaneously. Since these series have different goals and
are semi-independent of each other, a single NEWS-worthy item may be
introduced into different series at different times. For example,
feature F was introduced in the vA.B series at version vA.B.C, and was
later introduced into the vX.Y series at vX.Y.Z.
The first time feature F is released, the item will be listed in the
vA.B.C section, denoted as:
(** also to appear: X.Y.Z) -- indicating that this item is also
likely to be included in future release
version vX.Y.Z.
When vX.Y.Z is later released, the same NEWS-worthy item will also be
included in the vX.Y.Z section and be denoted as:
(** also appeared: A.B.C) -- indicating that this item was previously
included in release version vA.B.C.
:ref:`search`
.. toctree::
:maxdepth: 1
news-v3.x
news-v2.x
news-v1.x

View File

@@ -0,0 +1,10 @@
PRRTE v1.x series
=================
This file contains all the NEWS updates for all the PRTE v1.x
series, in reverse chronological order.
1.0.0 -- 17 Jul 2019
----------------------
Initial public release - not production intended

View File

@@ -0,0 +1,128 @@
PRRTE v2.x series
=================
This file contains all the NEWS updates for all the PRRTE v2.x
series, in reverse chronological order.
2.0.2 -- 11 Feb 2022
--------------------
.. important:: This release contains a workaround that resolves the prior
conflict with HWLOC versions 2.5.0 through 2.7.0 (inclusive).
Those versions of HWLOC are now supported.
- PR #1197: Cleanup a bit in prep for PMIx v5 release
- PR #1195: Remove HWLOC version block
- PR #1190: Add missing examples to tarball
- PR #1189: Ensure an error gets reported when rankfile fails
2.0.1 -- 1 Feb 2022
---------------------
.. important:: As of v2.0.1, PRRTE no longer has a dependency on "pandoc"
for building and installing man pages.
.. important:: PRRTE has identified a bug in HWLOC versions 2.5.0 thru
2.7.0 (inclusive) that causes PMIx to segfault during certain
operations. We have worked with the HWLOC developers to fix
that problem, and the fix will be included beginning in HWLOC
version 2.7.1. Accordingly, PRRTE now checks for the problem
HWLOC versions and will error out of configure if they are
encountered.
- PR #1185 and 1186: Update HWLOC version detection
- Reject versions 2.5.0-2.7.0, inclusive
- PR #1183: Always build the PBS scheduler support
- PR #1182: Cleanup handling of allocated node names
- PR #1169: Updates for rc5
- Enable support for PMIX_IOF_OUTPUT_RAW attribute
- Update NEWS
- PR #1167: Updates
- Be more flexible in library handling
- Update libevent/hwloc handling to match PMIx
- Remove event header defines
- Minor cleanups and ensure no local IOF copy
when persistent
- change the pcc wrapper compiler to a symlink
to pmixcc
- Cleanup code a bit
- Select all adapters with IPv4 addresses within
specified subnet ranges
- validate input for mpiexec --with-ft options
- PR #1158: Updates
- Fix uninitialized variable
- Update NEWS
- PR #1157: Fix brackets around code clause that caused
erroneous "unable to find tune file" error
- PR #1156: Handle default param case for HWT CPUs
- PR #1155: Cleanup qualifier detection for mapping policy
- PR #1154: Increase speed of rank computation
- Remove spurious break in loop
- PR #1153: Ensure the direct-multi test ranks-by slot
- PR #1151: Revamp map-by NUMA support
- PR #1150: Tranlate legacy OMPI params
- PR #1147: Updates
- Minor infrastructure and example cleanup
- Allow external caller to set prte_tool_basename
- Restore support for map/rank/bind by NUMA domains
- Standardize on use of HWLOC_OBJ_NUMANODE
- Activate the colocation code and debug it
- Update man pages
- PR #1145: delete use of PMIX_CHECK_BROKEN_QSORT refs
- PR #1137: Protect against PMIx v4.1.1-only definitions
- PR #1135: Final update v2.0.1 for rc3
- Show MCA base params in prte_info
- Silence variety of warnings
- Start enabling picky compilers when requested
- Remove unused variables in BMG component
- Increase verbosity of detected error
- Remove broken qsort support
- Add a legacy example
- Don't specify parent ID from tool
- PR #1104: Update v2.0.1 for rc3
- Silence Coverity warnings
- Update portable platform file
- Only order DVM termination once
- Abort configure if gcc is <= 4.8.1
- Fix segmentation fault caused by wrong size for vpids buffer
- PR #1097: Update v2.0.1 for rc2
- Update NEWS and VERSION
- Circulate and report local completion status for collectives
- Don't require pandoc to make a tarball
- Do not register xml topos
- Remove the Markdown source files for PRRTE man pages
- PR #1089: Updates
- Cleanup timeout support to differentiate spawn vs execution time limits
- PR #1086: Multiple commits
- Use the info list array feature to construct registration data
- Fix path check for pandoc
- PR #1083: Multiple commits
- Add MCA param to control device distance computation
- Correctly report --output-directory and --output-filename as deprecated
- Check for libevent minimum 2.0.21
- Properly handle generic "orte" MCA params
- Cleanups associated with IOF operations
- Avoid use of MCA params for singleton and report-uri
- autogen.pl: ignore all excluded components
- Don't allow PRRTE IOF to block during delivery
- Update ignores to include Coverity working directory
- Ensure we hold the IOF data until the PMIx library is done with it
- Add an "unlock" call to balance the code
- Use correct ninfo when passing into APIs
- Don't locally output stdout/err if prterun has a parent
2.0.0 -- 29 Jul 2021
--------------------
.. important:: This is the initial production release of the PRRTE
software system. It contains full support of the
PMIx v4.1 Standard plus extensions as provided by
OpenPMIx v4.1. It therefore requires support from
that release or above.
Delineating all the changes from the original v1.0.0 tarball would be
overwhelming. The original tarball was provided solely as a means for
packagers to prepare for the eventual production version and was not
intended for general use. As expected, the code base has been extensively
revised/rewritten since that time.
Further changes shall be tracked here in follow-on releases.

View File

@@ -0,0 +1,383 @@
PRRTE v3.x series
=================
This file contains all the NEWS updates for the PRRTE v3.x
series, in reverse chronological order.
3.0.8 -- 15 Dec 2024
--------------------
- PR #2103: Final update for release
- PR #2102: Remove stale config .m4 files
- PR #2100: Update NEWS and VERSION
- PR #2099: maintain correct ref count of child jobs
- PR #2097: Correctly parse map-by modifiers
- PR #2086: Propertly compute number of procs when not given
- PR #2082: Multiple commits
- Enclose XML output in a high-level tag
- Add support for show_help XML output
- Properly build the nidmap
- PR #2076: Multiple commits
- Register the singleton's nspace with the PMIx server
- Fix data type declaration in data server
3.0.7 -- 13 Nov 2024
--------------------
.. important:: This release represents the expected end of
the v3.0 series. Any follow-on bug fixes will
be committed to the release branch, but are
unlikely to generate an official release
tarball.
- PR #2067: Update NEWS and VERSION for final release
- PR #2064: Multiple commits
- Update help message to PRTE MCA parameter handling
- Fix typo in Makefile
- Fix rankfile use of relative node indexing
- PR #2060: Update NEWS and VERSION for release
- PR #2059: Protect against old PMIx versions
- PR #2057: Fix support for hetero LSF environments
- PR #2049: Cleanup show-help files
- PR #2047: Implement the PMIX_JOB_CHILD_SEP support
- PR #2044: Multiple commits
- Add a threaded client example
- Restore parsing of OMPI param files
- PR #2039: Unlock stdin target
- PR #2037: Pull a couple of fixes from master branch
- PR #2034: Fix deprecation warnings for ppr on socket objects
- PR #2032: Multiple commits
- avoid warnings (as errors) spots (init vars, etc.)
- remove unused Level var
- init installdirs structure (avoids warn-as-error)
- Pay attention to interface include/exclude params
- Protect against the envar version of the Slurm custom args param
- PR #2018: fix support for MPIEXEC_TIMEOUT
- PR #2017: Update prte_portable_platform_real.h from upstream gasnet
- PR #2015: Always have show-help available
- PR #2013: Remove unused yaml
- PR #2011: Cleanup show help formatting
- PR #2009: docs: update for Python 3.12
- PR #2007: Fix a segfault when no arguments are provided
- PR #2005: Multiple commits
- Remove unused function
- Revise cmd line parsing to handle special case
- PR #2002: Update OAC to latest HEAD
- PR #2000: Use the PMIx functions to check params
- PR #1998: Protect against LTO optimizer
- PR #1996: Read the Docs updates
- PR #1994: Provide a warning of potentially unknown Slurm params
3.0.6 -- 8 Jul 2024
-------------------
- PR #1992: Update NEWS and VERSION for release
- PR #1991: Multiple commits
- Protect against missing HWLOC object types
- Minor fixes to allow compile with pre-stone age HWLOC
- PR #1988: Github action: bring back MacOS builds
- PR #1986: Tailored backport of "various fixes for singleton support"
- PR #1985: Multiple commits
- Don't strip quotes from cmd line entries
- Update tar format to tar-pax
- PR #1983: Check the runtime version of PMIx
- PR #1979: Multiple commits
- Cleanup issues surfaced by devel-check
- Cleanup unused var warning
- Add CI build with clang
- Enable devel-check by default in Git repos
- Stop warning on LSF detection when not requested
- Silence warning
- MPI 4.1: add support for memory-alloc-kinds
- Remove MacOS CI builds
- Add support for PMIX_MEM_ALLOC_KIND
- PR #1971: Remove stale resilience document
- PR #1968: Try to improve an error message a bit
- PR #1966: Fix typo
- PR #1964: Repair the binding algorithm
- PR #1962: Correct name of help file for --hostfile
- PR #1959: Multiple commits
- Update the allocation simulator
- Use of pmix_getline from PMIx started in v4.2.5
- PR #1956: Multiple commits
- Allow execution without an active plm component
- Fix the binding algorithm to handle partial disablement
3.0.5 -- 21 Mar 2024
--------------------
- PR #1952: Multiple commits
- Update docs
- Update PMIx-related configure code
- update the hwloc utility code
- Add missing doc
- PR #1949: Update VERSION and NEWS for release
- PR #1946: Correct deprecation translation for use-hwthread-cpus
- PR #1936: Add missing show_help text
- PR #1933: Check for appfile and ingest it if found
- PR #1931: Multiple commits
- Fix testing of suicide for daemons
- Fix daemon suicide and preserve output files
- Remove unused MCA param
- Only trigger job failed to start once
- Add "close stale issues" actions
- oac: strengthen Sphinx check
- Revamp the session directory system
- guard against possible segfault in prted
3.0.4 -- 4 Feb 2024
-------------------
- PR #1918: Multiple commits
- Support query for number of available slots
- Add an option '--allow-run-as-root' into prted
- Update the Python regex for doc build
- PR #1910: Fix the map-by pe-list option
- PR #1908: Multiple commits
- Use pmix_path_nfs to detect shared file systems
- Remove debug
- Remove extra character at end of error messages
- psets: fix some problems with PMIX_QUERY_PSET_MEMBERSHIP query.
3.0.3 -- 19 Dec 2023
--------------------
- PR #1893: Check for stdatomic.h
- PR #1891: add nodes to job data for ALL jobs included in the launch message
- PR #1888: Multiple commits
- Minor tweaks of cmd line processing
- Preserve the clichk test code for future use
- PR #1884: Multiple commits
- Fix copy/paste error
- Remove daemonize option from prterun
- Fix the ras simulator module
- Preserve backward compatibility
- Check the PMIx version for min required
- Correct min version for pmix_getline util
- PR #1877: Multiple commits
- Remove the "refresh" key before requesting dmodx from PMIx server
- Shift a code block to enable MCA param directive for ppr mapping
- PR #1870: Multiple commits
- Begin to restore the detailed help topics
- docs: add prrte-rst-content to conf.py's exclude_patterns
- src/docs: update README.txt
- Consolidate non-component show_help files
- Add missing file
- PR #1865: Fix the seq mapper
- PR #1860: Multiple commits
- prte.c: a prefix of "/" is ok
- Correctly translate the plm_rsh MCA params
- Fix add-hostfile and add-host operations
- Add print functions for node, job, and proc flags
- Add missing "acquire_object"
- Fix handling of "--" in cmd line
- Use global PRRTE event base for sigchld callback
- Remove the event base param to prte_wait_cb
- Fix OMPI cmd line processing
- PR #1846: Multiple commits
- Restore the prun help strings
- Restore prte_info show help topics
- Recover the pterm show-help strings
- PR #1843: Avoid adding NULL prefix value to app attributes
- PR #1841: Multiple commits
- Error out of attempts for 32-bit builds
- Convert OMPI MCA params from legacy orte
- Fix display of DVM allocation
3.0.2 -- 23 Oct 2023
--------------------
- PR #1832: Update NEWS for release
- PR #1831: Silence error log
- PR #1829: Multiple commits
- docs/show-help-files: Re-enable Sphinx warning checks
- Correctly forward stdin to remote procs
- PR #1826: Multiple commits
- docs: document minimum PMIx version needed
- prte_setup_pmix.m4: use PMIx min version from VERSION
- Make checking min versions consistent
- Update CPPFLAGS for HWLOC config tests
- PR #1822: Fix rpmbuild error
- PR #1821: Roll VERSION to v3.0.2
3.0.1 -- 27 Sep 2023
--------------------
.. important:: This release contains a major revision of the PRRTE
documentation infrastructure. Accordingly, the various
documents may contain some number of errors and should
be regarded as a work-in-progress. We apologize in
advance for any inconvenience this may create, and will
continue to improve and correct the documents in future
releases.
- PR #1818: Update VERSION and rename news file
- PR #1816: Correct confusion over help file names
- PR #1814: Update NEWS infrastructure
- PR #1810: Blacklist the HWLOC GL component to avoid deadlock
- PR #1807: Multiple commits
- src/docs/show-help-files/Makefile.am: fix syntax
- docs: Fix up several minor bugs that showed up via CI
- Prototype Github Actions for PRRTE CI
- PR #1800: Keep trying to find the solution to the docs problem
- PR #1798: Keep trying to fix this Python stuff
- PR #1796: Don't ignore failure to create directory
- PR #1793: build-dummy-ini-files: Be safe for Python 2
- PR #1791: Update to track master branch
- PR #1787: Add support for dynamic definition of process sets
- PR #1784: Multiple commits
- docs: fix HTML word wapping in table cells
- Support fix for OMPI Github issue #11532
- Fix binding to multiple pe's
- Fix typos in the --enable-dlopen support
- Fix typo of variable name (PRRTE->PRTE)
- Remove Doxygen
- PR #1766: Multiple commits
- Update ignores
- mca/rmaps: impute process count when np is not set
- Complete cleanup of map/bind default settings
- PR #1762: v3.0: .github/workflows: update actions versions
- PR #1752: [v3.0] rmaps/base: remove call to hwloc_bitmap_andnot() in bind_generic()
- PR #1747: Respect "--" marker
- PR #1741: [v3.0] RTD: Add .readthedocs.yaml file
- PR #1737: Multiple commits
- Add debug output in fence upcall
- Silence TSan data race warning.
- PR #1734: v3.0: backport fixes for ompi v5.0 submodule update
- PR #1727: Protect against bad ppr directives
- PR #1724: Fix one more place
- PR #1721: Just disable the xml map output for ancient hwloc
- PR #1718: Protect against ancient hwloc versions
- PR #1714: Multiple commits
- Parsable output in an XML format
- Support odd topologies and relax pe-binding rules
- Cleanup some formatting and unnecessary debug
- PR #1705: Allow specifying ppr as the default mapping policy
- PR #1702: Multiple commits
- Recoverable jobs may report more than one proc error over the lifetime
- Fix double-counting of failed procs in recoverable jobs
- PR #1700: Update headers for rc2
- PR #1696: Always set waitpid-fired flag when proc exits
- PR #1694: Fix passing of envars for spawn
- PR #1692: Multiple commits
- Plug small memory leaks.
- Plug memory leaks.
- Adhere to project's variable declaration convention.
- Cleanup initial implementation of allocate and session ctrl
- Protect one more place for Session_control
- Fix the routing for non-tree-spawn launch
- Cleanup prte_info output
- Ensure we exit cleanly when a daemon fails to start
- Store prted URI under correct name
- Remove duplicate computation of routing tree
- Minor cleanup of verbose output
- Fix typo
- Send direct to HNP if we don't know a route
- Cleanup some mangled formatting
- Cleanup some debug output
- Update the pmix server integration
- PR #1686: Update config/oac submodule
- PR #1682: Multiple commits
- Remove wrapper definitions
- Extend example to check for sessionID and jobID
- PR #1678: Multiple commits
- add --debug-daemon to prted options
- Add the rml and routed types to prte_info array
- PR #1674: Ensure cmd line errors provide error messages
- PR #1672: Multiple commits
- Correct default binding for map-by node/slot
- Provide better error message for cross-package binding
- Add missing command line directives
- Fix minor issues found in tests.
- Silence compiler warning in test/connect.
- Silence compiler warnings in examples.
- Use exit macros in example dmodex.
- Remove antiquated code that can cause problems
- Update sphinx requirements
- Remove the PMIX_SIZE_ESTIMATE support
- PR #1660: Correct function name when using older hwloc versions
- PR #1658: Multiple commits
- Properly handle overload-allowed
- Define MIN for environments that lack it
- Fix a typo in the README, fixes #1645
- docs: fix Sphinx parsing error
- PR #1644: Multiple commits
- Add a spawn_multiple test
- Provide an estimate of the size of registration data
- Provide size estimates for collective operations that return data
- Add an option to display the available CPUs
- Fix generate_dist type
- Protect against missing attribute definition
- Set distances array type
- Add "parseable" display qualifier
- Generate distances by default
- Show help message when mapping too low
- Fix round-robin by obj with multiple cpus/rank
- Fix map-by slot and node for multiple cpus/rank
- PR #1633: v3.0.x: First cut of Sphinx/ReadTheDocs docs
- PR #1626: Remove unused variable
- PR #1622: Multiple commits
- Update version to 3.0.1
- Extend query support to include allocation info
- Remove debug
- Include topology in allocated node info
- Minor touchups of the "fault" example
- Designate the framework project as PRTE
- Begin adding support for new server module function pointer
- Silence warning - add return values
- Update to compatibility with PMIx master ranch
- Protect against earlier PMIx versions
- Add an IOF stress test
- Accept local group op upcalls
- Check for and track scheduler attachment
- Check for map/bind conflicting directive, improve unbound report
- Don't error out on binding if not required
- PR #1600: Multiple commits
- Minor change to check_os_flavors
- Don't emit an error output if not needed
- PR #1597: Fix oac_check_package.m4
- PR #1595: build: fix bashisms in configure
3.0.0 -- 13 Nov 2022
--------------------
.. important:: This release represents a major update to the PRRTE
code base from prior releases. Many of the changes will be
transparent to the user. However, there are a few key areas that
may (likely) impact users. These include:
- changes to the cmd line interpreter. PRRTE has provided an
abstraction layer that allows programming library developers
and environment vendors to customize the cmd line of PRRTE
binaries (e.g., prterun and prun). This is governed by the
detection of a "personality" that is to be used for defining
the cmd line options. The personality can be set either directly
on the cmd line itself (via the "--personality foo" option) or
is detected by PRRTE thru the environment.
- a more extensive "--help" support system.
- reduction in the "--rank-by" options.
- addition of new "--output" options
- removal of the "mindist" mapper due to lack of a maintainer
There are quite a few more changes than listed here, but they mostly
pertain to code internals. However, these dictate that PRRTE v3.0.0
require use of PMIx v4.2 or above to compile. Note that this doesn't
impact the PMIx level associated with any applications executed by
PRRTE - the only requirement is that applications link against a
PMIx version that meets the PMIx cross-version requirements (i.e., a
minimum of PMIx v2.5).
Detailed changes include:
- PR #1412: Restrict PRRTE to PMIx v4.2+
- PR #1410: Remove schizo/hydra component
- PR #1409: Add new output options to help string
- PR #1407: Support a broader range of IO output formats
- PR #1404: Fix a hang in daemon callback
- PR #1402: Cleanup race condition in daemon reports
- PR #1399: Multiple commits
- Allow mapping in overload scenario if bind not specified
- Ensure rankfile and seq mappers computer local and app ranks
- PR #1394: Add forwarding of stdin to indirect example
- PR #1391: Change the default mapping for --bind-to none option to BYSLOT.
Branch from `master@f3d4089 <https://github.com/openpmix/prrte/commit/f3d4089>`_

View File

@@ -0,0 +1,96 @@
.. -*- rst -*-
Copyright (c) 2022-2023 Nanook Consulting. All rights reserved.
Copyright (c) 2023 Jeffrey M. Squyres. All rights reserved.
$COPYRIGHT$
Additional copyrights may follow
$HEADER$
Notifications
=============
PRRTE provides notifications on a variety of process and job
states. Each notification includes not only the PMIx event code that
generated it, but also information on the cause of the event to the
extent to which this is known.
Supported job events include:
* ``PMIX_READY_FOR_DEBUG``: indicates that all processes in the
reported nspace have reached the specified debug stopping point.
* ``PMIX_LAUNCH_COMPLETE``: indicates that the reported nspace has
been launched |mdash| i.e., the involved PRRTE daemons all report
that their respective child processes have completed fork/exec.
* ``PMIX_ERR_JOB_CANCELED``: indicates that the job was cancelled by
user command, usually issued via an appropriate PMIx-enabled tool.
* ``PMIX_ERR_JOB_FAILED_TO_LAUNCH``: indicates that the specified job
failed to launch. This can be due to a variety of factors that
include inability to find the executable on at least one involved
node.
Supported process events include:
* ``PMIX_ERR_PROC_TERM_WO_SYNC``: indicates that at least one process
in the job called ``PMIx_Init``, thus indicating some notion of a
global existence, and at least one process in the job subsequently
exited without calling ``PMIx_Finalize``. This usually indicates a
failure somewhere in the application itself that precluded an
orderly shutdown of the process. Notification will include the
process ID that exited in this manner.
* ``PMIX_EVENT_PROC_TERMINATED``: indicates that the reported process
terminated normally. Notification will include the process ID that
exited and its exit status.
* ``PMIX_ERR_PROC_KILLED_BY_CMD``: indicates that the reported process
was killed by PRRTE command. This typically occurs in response to a
Ctrl-C (or equivalent) being applied to the PRRTE launcher, thereby
instructing PRRTE to forcibly terminate its processes. The event
currently will only be issued in the case where forcible termination
is commanded via a tool that can pass the process IDs that are
specifically to be terminated |mdash| otherwise, in the case of the
Ctrl-C event previously described, all processes in the job will be
terminated, leaving none to be notified. Notification will include
the process ID that was terminated.
* ``PMIX_ERR_PROC_SENSOR_BOUND_EXCEEDED``: indicates that the
specified process exceeded a previously-set sensor boundary |mdash|
e.g., it may have grown beyond a defined memory limit. Such events
may or may not automatically trigger termination by command,
depending upon the behavior of the sensor. Notification will include
the process ID that exceeded the sensor boundary plus whatever
information the sensor provides regarding measurements and bounds.
* ``PMIX_ERR_PROC_ABORTED_BY_SIG``: indicates that the specified
process was killed by a signal |mdash| e.g., a segmentation
fault/violation or an externally applied signal. Notifications will
include the process ID that was killed and the corresponding
reported signal.
* ``PMIX_ERR_PROC_REQUESTED_ABORT:`` indicates that the specified
process has aborted by calling the ``PMIx_Abort``
function. Notification will include the process ID that called abort
and its exit status.
* ``PMIX_ERR_EXIT_NONZERO_TERM``: indicates that the specified process
terminated with a non-zero exit status. This notification is only
generated in the case where the runtime option
``ERROR-NONZERO-STATUS`` is set to true, thereby indicating that a
process exiting with non-zero status is to be considered an
error. As PRRTE can be overwhelmed by a large job where every
process exits with a non-zero status, only the *first* process in a
given job that exits with a non-zero status will generate a
notification unless the ``RECOVERABLE`` runtime option is also
provided as otherwise the job will be immediately
terminated. Notifications will include the process ID that exited
and the status it returned.
* ``PMIX_ERR_PROC_RESTART``: indicates that the specified process has
been restarted. Additional information may include the hostname
where the process is now executing.

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-deprecated.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-diagnostics.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-examples.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-fundamentals.rst

View File

@@ -0,0 +1,22 @@
Process placement
=================
PRRTE provides a set of three controls for assigning process
locations and ranks:
#. Mapping: Assigns a default location to each process
#. Ranking: Assigns a unique integer rank value to each process
#. Binding: Constrains each process to run on specific processors
The sections below describe these controls in more detail.
.. toctree::
:maxdepth: 1
overview
examples
fundamentals
limits
diagnostics
rankfiles
deprecated

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-limits.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-rankfiles.rst

View File

@@ -0,0 +1,43 @@
.. _label-quickstart:
Quick start
===========
In many cases, PRRTE can be built and installed by simply
indicating the installation directory on the command line:
.. code-block:: sh
$ tar xf prrte-<version>.tar.bz2
$ cd prrte-<version>
$ ./configure --prefix=<path> |& tee config.out
...lots of output...
$ make -j 8 |& tee make.out
...lots of output...
$ make install |& tee install.out
...lots of output...
Note that there are many, many configuration options to the
``./configure`` step. Some of them may be needed for your particular
environmnet; see below for desciptions of the options available.
If your installation prefix path is not writable by a regular user,
you may need to use ``sudo`` or ``su`` to run the ``make install``
step. For example:
.. code-block:: sh
$ sudo make install |& tee install.out
[sudo] password for builduser: <enter your password here>
...lots of output...
Finally, note that VPATH builds are fully supported. For example:
.. code-block:: sh
$ tar xf prrte-<version>.tar.bz2
$ cd prrte-<version>
$ mkdir build
$ cd build
$ ../configure --prefix=<path> |& tee config.out
...etc.

View File

@@ -0,0 +1,22 @@
Release Notes
=============
- Systems that have been tested are:
- Linux (various flavors/distros), 32 bit, with gcc
- Linux (various flavors/distros), 64 bit (x86), with gcc, Intel,
and Portland (*)
- OS X (10.7 and above), 32 and 64 bit (x86_64), with gcc (*)
- PRRTE has taken some steps towards Reproducible Builds
(https://reproducible-builds.org/). Specifically, PRRTE's
``configure`` and ``make`` process, by default, records the build
date and some system-specific information such as the hostname where
PRRTE was built and the username who built it. If you desire a
Reproducible Build, set the ``$SOURCE_DATE_EPOCH``, ``$USER`` and
``$HOSTNAME`` environment variables before invoking ``configure``
and ``make``, and PRRTE will use those values instead of invoking
``whoami`` and/or ``hostname``, respectively. See
https://reproducible-builds.org/docs/source-date-epoch/ for
information on the expected format and content of the
``$SOURCE_DATE_EPOCH`` variable.

View File

@@ -0,0 +1,71 @@
Session directory
=================
PRRTE establishes a "session directory" on the filesystem to serve as
a top-level location for temporary files used by both the local PRRTE
daemon and its child processes.
This is done to enable quick and easy cleanup in the event that PRRTE
is unable to fully cleanup after itself.
More detail on session directories is provided in the How Things Work
:ref:`session directory <session-dir-detail-label>` section.
Directory location
------------------
PRRTE decides where to located the root of the session directory by
examining the following (in precedence order):
#. If the value of the ``prte_top_session_dir`` MCA parameter is not
empty, use that (it defaults to empty).
.. note:: MCA parameters can be set via environment variables, on
the command line, or in a parameter file.
.. note:: If necessary, the value of the top session directory on
the local node where the launcher (e.g., ``prun``, ``prterun``,
or ``mpirun``) is executing can be set separately from
the value to be used on compute nodes via the
``prte_local_tmpdir_base`` and ``prte_remote_tmpdir_base``
parameters.
#. If the environment variable ``TMPDIR`` is not empty, use that.
#. If the environment variable ``TEMP`` is not empty, use that.
#. If the environment variable ``TMP`` is not empty, use that.
#. Use ``/tmp``
Directory name
--------------
By default, the session directory name is set to
.. code::
<tool>.<nodename>.<pid>.<uid>
where `tool` is the argv[0] of the process setting up the
session directory. In most cases, this will be either `prte`,
`prterun`, or `prted` - though special tools such as `psched`
may also create a session directory tree.
The session directory name includes the PID
of the daemon process to allow a user to have multiple
instances of a tool concurrently executing on a node.
.. note::
Each tool will generate its own session directory tree. This
is done to avoid cleanup race conditions where one tool might
cleanup the session directory, and thereby remove the contact
information for a tool that is continuing to execute.
Tools
-----
In the case of tools, the rendezvous files containing connection
information for a target server are located in the session directory
tree. Thus, it may be necessary to point the tool at the location
where those files can be found if that location is other than the
expected default.

View File

@@ -0,0 +1,68 @@
.. _label-version-numbers:
Software Version Numbers
========================
PRRTE's version numbers are the union of several different values:
major, minor, release, and an optional quantifier.
* Major: The major number is the first integer in the version string
(e.g., v1.2.3). Changes in the major number typically indicate a
significant change in the code base and/or end-user
functionality. The major number is always included in the version
number.
* Minor: The minor number is the second integer in the version
string (e.g., v1.2.3). Changes in the minor number typically
indicate a incremental change in the code base and/or end-user
functionality. The minor number is always included in the version
number:
* Release: The release number is the third integer in the version
string (e.g., v1.2.3). Changes in the release number typically
indicate a bug fix in the code base and/or end-user
functionality.
* Quantifier: PRRTE version numbers sometimes have an arbitrary
string affixed to the end of the version number. Common strings
include:
* ``aX``: Indicates an alpha release. X is an integer indicating
the number of the alpha release (e.g., v1.2.3a5 indicates the
5th alpha release of version 1.2.3).
* ``bX``: Indicates a beta release. X is an integer indicating
the number of the beta release (e.g., v1.2.3b3 indicates the 3rd
beta release of version 1.2.3).
* ``rcX``: Indicates a release candidate. X is an integer
indicating the number of the release candidate (e.g., v1.2.3rc4
indicates the 4th release candidate of version 1.2.3).
Although the major, minor, and release values (and optional
quantifiers) are reported in PRRTE snapshot tarballs, the
filenames of these snapshot tarballs follow a slightly different
convention.
Specifically, the snapshot tarball filename contains three distinct
values:
* Most recent Git tag name on the branch from which the tarball was
created.
* An integer indicating how many Git commits have occurred since
that Git tag.
* The Git hash of the tip of the branch.
For example, a snapshot tarball filename of
``prrte-v1.0.2-57-gb9f1fd9.tar.bz2`` indicates that this tarball was
created from the v1.0 branch, 57 Git commits after the ``v1.0.2`` tag,
specifically at Git hash gb9f1fd9.
PRRTE's Git master branch contains a single ``dev`` tag. For example,
``prrte-dev-8-gf21c349.tar.bz2`` represents a snapshot tarball created
from the master branch, 8 Git commits after the "dev" tag,
specifically at Git hash gf21c349.
The exact value of the "number of Git commits past a tag" integer is
fairly meaningless; its sole purpose is to provide an easy,
human-recognizable ordering for snapshot tarballs.

View File

@@ -0,0 +1,134 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

View File

@@ -0,0 +1,899 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@@ -0,0 +1 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,156 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

View File

@@ -0,0 +1,14 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '3.0.8',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

View File

@@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

View File

@@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,199 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

View File

@@ -0,0 +1,75 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

View File

@@ -0,0 +1,566 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
}
},
hasIndex: () => Search._index !== null,
deferQuery: (query) => (Search._queued_query = query),
stopPulse: () => (Search._pulse_status = -1),
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the word
let word = stemmer.stemWord(queryTermLower);
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
const results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
};
_ready(Search.init);

View File

@@ -0,0 +1,144 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,243 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>5. PRRTE DVM Configuration &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="6. How Things Work" href="how-things-work/index.html" />
<link rel="prev" title="4. Installing PRRTE" href="install.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">5. PRRTE DVM Configuration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#configuration-options">5.1. Configuration Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#bootstrap-options">5.1.1. Bootstrap Options</a></li>
<li class="toctree-l3"><a class="reference internal" href="#operational-options">5.1.2. Operational Options</a></li>
<li class="toctree-l3"><a class="reference internal" href="#logging-options">5.1.3. Logging Options</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#configurator-tool">5.2. Configurator Tool</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">5. </span>PRRTE DVM Configuration</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/configuration.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="prrte-dvm-configuration">
<h1><span class="section-number">5. </span>PRRTE DVM Configuration<a class="headerlink" href="#prrte-dvm-configuration" title="Permalink to this heading"></a></h1>
<p>The PMIx Reference RunTime Environment (PRRTE) can be instantiated
as a Distributed Virtual Machine (DVM) in two ways. First, the
<code class="docutils literal notranslate"><span class="pre">prte</span></code> command can be executed at a shell prompt. This will discover
the available resources (either from hostfile or as allocated by a
resource manager) and start a PRRTE shepherd daemon (<a class="reference internal" href="man/man1/prted.1.html#man1-prted"><span class="std std-ref">prted(1)</span></a>) on each of the indicated nodes.</p>
<p>The other method, however, is to bootstrap the DVM at time of cluster
startup. Bootstrapping PRRTE allows the DVM to serve as the system-level
runtime, providing a full-service PMIx environment to sessions under
its purview. Integration to an appropriately enabled scheduler can
provide a full workload managed environment for users.</p>
<p>Establishing the DVM using the bootstrap method requires that a PRRTE
configuration file be created and made available on every node of the
cluster at node startup. The configuration file provides necessary
information for establishing the communication infrastructure between
the DVM controller and the compute node daemons. It also provides a
means for easily defining DVM behavior for options such as logging,
system-level prolog and epilog scripts for each session, and other
PRRTE features.</p>
<p>The configuration file can be manually created or can be created using
the <a class="reference external" href="configurator.html">PRRTE configuration tool</a>.
Manual creation can best be done
by editing the example configuration file (<code class="docutils literal notranslate"><span class="pre">&lt;source-location&gt;/src/etc/prte.conf</span></code>).
This file contains all the supported configuration options, with all
entries commented out. Simply uncomment the options of interest and
set them to appropriate values. The file will be installed into the
final <code class="docutils literal notranslate"><span class="pre">&lt;install-location&gt;/etc</span></code> when <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">install</span></code> is performed.</p>
<div class="section" id="configuration-options">
<h2><span class="section-number">5.1. </span>Configuration Options<a class="headerlink" href="#configuration-options" title="Permalink to this heading"></a></h2>
<p>The following options are supported by PRRTE v3.0.8.
While we make every effort to maintain compatibility with prior versions,
we recommend that you check options when installing new versions to
see what may have changed and/or been added. We also recommend that
you use the <a class="reference external" href="configurator.html">PRRTE DVM configurator</a> for the
version you are using to ensure that it is fully compatible.</p>
<div class="section" id="bootstrap-options">
<h3><span class="section-number">5.1.1. </span>Bootstrap Options<a class="headerlink" href="#bootstrap-options" title="Permalink to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">ClusterName=&lt;string&gt;</span> <span class="pre">(default:</span> <span class="pre">&quot;cluster&quot;)</span></code> is the name of the cluster upon
which the DVM is executing. This is used by PRRTE to form the namespace
for the DVM daemons, which is taken as <code class="docutils literal notranslate"><span class="pre">&lt;clustername&gt;-prte-dvm</span></code>.
Using different names for each of your clusters is important if you use a single
database to record information from multiple PRRTE-managed clusters.</p>
<p><code class="docutils literal notranslate"><span class="pre">DVMControllerHost=&lt;hostname&gt;</span></code> is the host upon which the DVM controller
will be executing. The <code class="docutils literal notranslate"><span class="pre">prted</span></code> that finds itself booting onto this host
will declare itself to be the system controller and will initialize itself
accordingly.</p>
<p><code class="docutils literal notranslate"><span class="pre">DVMControllerPort=&lt;number&gt;</span> <span class="pre">(default:</span> <span class="pre">7817)</span></code> is the TCP port upon which the
DVM controller will be listening for connections from its <code class="docutils literal notranslate"><span class="pre">prted</span></code> daemons
on the remaining system nodes.</p>
<p><code class="docutils literal notranslate"><span class="pre">PRTEDPort=&lt;number</span> <span class="pre">(default:</span> <span class="pre">7818)</span></code> is the TCP port upon which each
<code class="docutils literal notranslate"><span class="pre">prted</span></code> daemon will be listening for connections from its peer daemons
on the other system nodes.</p>
<p><code class="docutils literal notranslate"><span class="pre">DVMNodes=&lt;regex</span> <span class="pre">of</span> <span class="pre">DVM</span> <span class="pre">nodes&gt;</span> <span class="pre">(default:</span> <span class="pre">none)</span></code> provides a regular expression
identifying the nodes that upon which user applications can run. IP addresses can
be provided in place of hostnames if desired.The regular expression can consist of
a simple comma-delimited list of hostnames, or a comma-delimited list of hostname
ranges (e.g., “linux0,linux[2-10]”), or a PMIx “native” regular expression.</p>
</div>
<div class="section" id="operational-options">
<h3><span class="section-number">5.1.2. </span>Operational Options<a class="headerlink" href="#operational-options" title="Permalink to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">DVMTempDir=&lt;path&gt;</span> <span class="pre">(default:</span> <span class="pre">/tmp)</span></code> is the temporary directory that the
DVM daemons and controller are to use as the base for their session directories.
Working files/directories for the DVM will be placed under this location.</p>
<p><code class="docutils literal notranslate"><span class="pre">SessionTmpDir=&lt;path&gt;</span> <span class="pre">(default:</span> <span class="pre">DVMTempDir)</span></code> is the temporary directory that
the DVM daemons are to use as the base for session directories for all
application sessions. Working files for each session will be placed under
this location, separated out into a directory for each session.</p>
</div>
<div class="section" id="logging-options">
<h3><span class="section-number">5.1.3. </span>Logging Options<a class="headerlink" href="#logging-options" title="Permalink to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">ControllerLogJobState=&lt;true|false&gt;</span> <span class="pre">(default:</span> <span class="pre">false)</span></code> directs the DVM
controller to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.</p>
<p><code class="docutils literal notranslate"><span class="pre">ControllerLogProcState=&lt;true|false&gt;</span> <span class="pre">(default:</span> <span class="pre">false)</span></code> directs the DVM
controller to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.</p>
<p><code class="docutils literal notranslate"><span class="pre">ControllerLogPath=&lt;path&gt;</span> <span class="pre">(default:</span> <span class="pre">DVMTempDir)</span></code> is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the <code class="docutils literal notranslate"><span class="pre">DVMTempDir</span></code> location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as <code class="docutils literal notranslate"><span class="pre">prtectrlr-&lt;hostname&gt;-log&lt;</span></code>.</p>
<p><code class="docutils literal notranslate"><span class="pre">PRTEDLogJobState=&lt;true|false&gt;</span> <span class="pre">(default:</span> <span class="pre">false)</span></code> directs each <code class="docutils literal notranslate"><span class="pre">prted</span></code>
in the DVM to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.</p>
<p><code class="docutils literal notranslate"><span class="pre">PRTEDLogProcState=&lt;true|false&gt;</span> <span class="pre">(default:</span> <span class="pre">false)</span></code> directs each <code class="docutils literal notranslate"><span class="pre">prted</span></code>
in the DVM to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.</p>
<p><code class="docutils literal notranslate"><span class="pre">PRRTEDLogPath=&lt;path&gt;</span> <span class="pre">(default:</span> <span class="pre">DVMTempDir)</span></code> is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the <code class="docutils literal notranslate"><span class="pre">DVMTempDir</span></code> location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as <code class="docutils literal notranslate"><span class="pre">prted-&lt;hostname&gt;-log&lt;</span></code>.</p>
</div>
</div>
<div class="section" id="configurator-tool">
<h2><span class="section-number">5.2. </span>Configurator Tool<a class="headerlink" href="#configurator-tool" title="Permalink to this heading"></a></h2>
<p>The <a class="reference external" href="configurator.html">PRRTE configuration tool</a> contains all the supported options in an
easy-to-use form. Once you have filled out the desired entries, the
“submit” button will show the resulting configuration file on the
browser window — a simple “copy/paste” operation into your target
configuration file will yield the final result.</p>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="install.html" class="btn btn-neutral float-left" title="4. Installing PRRTE" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="how-things-work/index.html" class="btn btn-neutral float-right" title="6. How Things Work" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,424 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PRRTE DVM Configuration Tool &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">PRRTE DVM Configuration Tool</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<!--
Copyright (C) 2023 Nanook Consulting. All rights reserved
This file is part of the PMIx Reference RunTime Environment (PRRTE), an
RTE that provides full PMIx support. For details, see the repository
at <https://github.com/openpmix/prrte/>.
PRRTE is free software distributed under the 3-clause BSD license. It
is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY or implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the full license statement at
<https://docs.prrte.org/en/latest/license.html> for details.
-->
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PRRTE DVM Configuration Tool</title>
<meta name="description" content="PRRTE DVM Configuration Tool: An easy way to create a PRRTE configuration file" />
<style>
.onoffswitch {
position: relative; width: 90px;
-webkit-user-select:none; -moz-user-select:none; -ms-user-select: none;
}
.onoffswitch-checkbox {
display: none;
}
.onoffswitch-label {
display: block; overflow: hidden; cursor: pointer;
border: 2px solid #999999; border-radius: 20px;
}
.onoffswitch-inner {
display: block; width: 200%; margin-left: -100%;
transition: margin 0.3s ease-in 0s;
}
.onoffswitch-inner:before, .onoffswitch-inner:after {
display: block; float: left; width: 50%; height: 30px; padding: 0; line-height: 30px;
font-size: 14px; color: white; font-family: Trebuchet, Arial, sans-serif; font-weight: bold;
box-sizing: border-box;
}
.onoffswitch-inner:before {
content: "ON";
padding-left: 10px;
background-color: #34A7C1; color: #FFFFFF;
}
.onoffswitch-inner:after {
content: "OFF";
padding-right: 10px;
background-color: #EEEEEE; color: #999999;
text-align: right;
}
.onoffswitch-switch {
display: block; width: 18px; margin: 6px;
background: #FFFFFF;
position: absolute; top: 0; bottom: 0;
right: 56px;
border: 2px solid #999999; border-radius: 20px;
transition: all 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
margin-left: 0;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
right: 0px;
}
</style>
</head>
<SCRIPT type="text/javascript">
<!--
function get_field(name,form)
{
if (form.value) {
return name + "=" + form.value
}
return "#" + name + "="
}
function get_checkbox_value(form)
{
if (form.checked) {
return "ON"
} else {
return "OFF"
}
}
function displayfile()
{
var printme = "# prte.conf file generated by prte-configurator.html.<br>" +
"# Put this file on all nodes of your cluster.<br>" +
"# See the prte.conf documentation for more information.<br>" +
"#<br>" +
"# Bootstrap Options<br>" +
get_field("ClusterName",document.config.cluster_name) + "<br>" +
get_field("DVMControllerHost",document.config.controller_host) + "<br>" +
get_field("DVMControllerPort",document.config.controller_port) + "<br>" +
get_field("PRTEDPort",document.config.prted_port) + "<br>" +
get_field("DVMNodes",document.config.dvm_nodes) + "<br>" +
"# <br>" +
"# Operational Options<br>" +
get_field("DVMTempDir",document.config.dvm_tmpdir) + "<br>" +
get_field("SessionTmpDir",document.config.session_tmpdir) + "<br>" +
"# <br>" +
"# Logging Options<br>" +
"ControllerLogJobState=" + get_checkbox_value(document.config.ctrlr_logjobstate) + "<br>" +
"ControllerLogProcState=" + get_checkbox_value(document.config.ctrlr_logprocstate) + "<br>" +
get_field("ControllerLogPath",document.config.ctrlr_logpath) + "<br>" +
"PRTEDLogJobState=" + get_checkbox_value(document.config.prted_logjobstate) + "<br>" +
"PRTEDLogProcState=" + get_checkbox_value(document.config.prted_logprocstate) + "<br>" +
get_field("PRTEDLogPath",document.config.prted_logpath) + "<br>"
document.open();
document.write(printme);
document.close();
}
-->
</SCRIPT>
<!-- <div style='visibility:hidden;text-align:left;background:#ccc;border:1px solid black;position: absolute;left:100;z-index:1;padding:5;' id='out_box'></div> -->
<form name=config>
<H1>PRRTE Version v3.0.8 DVM Configuration Tool</H1>
<P>This configuration tool is intended to help system administrators create
a PRRTE configuration file that sets important configuration parameters.</P>
<P>While every attempt is made to maintain compatibility of the PRRTE
configuration tool and options across versions, we recommend that the
configuration file be built using the tool distributed with the version
being installed on your cluster. Some parameters will be set to default
values, but you can manually edit the resulting <I>prte.conf</I> file as desired
for greater flexibility. See the PRRTE documentation at <A HREF="https://docs.prrte.org">https://docs.prrte.org</A>,
or your locally generated docs (if available), for more
details about the configuration parameters for this version.</P>
<P>Note that while PRRTE daemons create log files and other files as needed,
they treat the lack of parent directories (e.g., the specified "DVMTempDir")
as a fatal error. This prevents the daemons from running if critical file
systems are not mounted.</P>
<P>After you have filled in the fields of interest, use the
"Submit" button on the bottom of the page to display the resulting
<I>prte.conf</I> file. It will appear on your web browser. Save the file
in text format as <I>prte.conf</I> for use by the DVM.
<P><B>NOTE:</B> Hostname values should not be specified as fully qualified domain
names (e.g. use <I>foo</I> rather than <I>foo.bar.com</I>).
</P>
<P><B>NOTE:</B> This configuration file must be installed as <I>prte.conf</I> in the
<I>etc</I> directory under the PRRTE installation location on all nodes in your cluster.
For example, if PRRTE was installed in <I>/prrte</I>, then the configuration file
must be stored as <I>/prrte/etc/prte.conf</I> so that all prted daemons can find it.
</P>
<H2>Supported Options</H2>
The following options are supported by PRRTE v3.0.8.
<H3>Bootstrap Options</H3>
<b>ClusterName</b>: <input type="text" name="cluster_name" value="cluster">
<BR>
The name of the cluster upon which the DVM is executing. This is used by PRRTE
to form the namespace for the DVM daemons, which is taken as <I><clustername>-prte-dvm</I>.
Using different names for each of your clusters is important if you use a single
database to record information from multiple PRRTE-managed clusters.
<BR>
<BR>
<b>DVMControllerHost</b>: <input type="text" name="controller_host" value="host0">
<BR>
The host upon which the DVM controller will be executing. The <I>prted</I> that
finds itself booting onto this host will declare itself to be the system controller
and will initialize itself accordingly.
<BR>
<BR>
<b>DVMControllerPort</b>: <input type="text" name="controller_port" value="7817">
<BR>
The TCP port upon which the
DVM controller will be listening for connections from its <I>prted</I> daemons
on the remaining system nodes.
<BR>
<BR>
<b>PRTEDPort</b>: <input type="text" name="prted_port" value="7818">
<BR>
The TCP port upon which each
<I>prted</I> daemon will be listening for connections from its peer daemons
on the other system nodes.
<BR>
<BR>
<b>DVMNodes</b>: <input type="text" name="dvm_nodes" value="">
<BR>
Provides a regular expression
identifying the nodes that upon which user applications can run. IP addresses can
be provided in place of hostnames if desired.The regular expression can consist of
a simple comma-delimited list of hostnames, or a comma-delimited list of hostname
ranges (e.g., "linux0,linux[2-10]"), or a PMIx "native" regular expression.
<BR>
<BR>
<H3>Operational Options</H3>
<b>DVMTempDir</b>: <input type="text" name="dvm_tmpdir" value="/tmp">
<BR>
The temporary directory that the
DVM daemons and controller are to use as the base for their session directories.
Working files/directories for the DVM will be placed under this location.
<BR>
<BR>
<b>SessionTmpDir</b>: <input type="text" name="session_tmpdir" value="/tmp">
<BR>
The temporary directory that
the DVM daemons are to use as the base for session directories for all
application sessions. Working files for each session will be placed under
this location, separated out into a directory for each session.
<BR>
<BR>
<H3>Logging Options</H3>
<b>ControllerLogJobState</b>:
<div class="onoffswitch">
<input type="checkbox" name="ctrlr_logjobstate" class="onoffswitch-checkbox" id="ControllerLogJobState" checked>
<label class="onoffswitch-label" for="ControllerLogJobState">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
Directs the DVM
controller to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
<BR>
<BR>
<b>ControllerLogProcState</b>:
<div class="onoffswitch">
<input type="checkbox" name="ctrlr_logprocstate" class="onoffswitch-checkbox" id="ControllerLogProcState" checked>
<label class="onoffswitch-label" for="ControllerLogProcState">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
Directs the DVM
controller to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
<BR>
<BR>
<b>ControllerLogPath</b>: <input type="text" name="ctrlr_logpath" value="">
<BR>
Path to where the logs are to be written. If a relative path is provided,
then the directory will be created under the <I>DVMTempDir</I> location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as <I>prtectrlr-<hostname>-log</I>.
<BR>
<BR>
<b>PRTEDLogJobState</b>:
<div class="onoffswitch">
<input type="checkbox" name="prted_logjobstate" class="onoffswitch-checkbox" id="PRTEDLogJobState" checked>
<label class="onoffswitch-label" for="PRTEDLogJobState">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
Directs each <I>prted</I>
in the DVM to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
<BR>
<BR>
<b>PRTEDLogProcState</b>:
<div class="onoffswitch">
<input type="checkbox" name="prted_logprocstate" class="onoffswitch-checkbox" id="PRTEDLogProcState" checked>
<label class="onoffswitch-label" for="PRTEDLogProcState">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
Directs each <I>prted</I>
in the DVM to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
<BR>
<BR>
<b>PRTEDLogPath</b>: <input type="text" name="prted_logpath" value="">
<BR>
Path to where the logs are to be written. If a relative path is provided,
then the directory will be created under the <I>DVMTempDir</I> location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as <I>prted-<hostname>-log</I>.
<BR>
<BR>
<input type=button value="Submit" onClick="javascript:displayfile()">
<input type=reset value="Reset Form">
</form>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,202 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>12. Contributing to PRRTE &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="13. License" href="license.html" />
<link rel="prev" title="11.5. ReStructured Text for those who know Markdown" href="developers/rst-for-markdown-expats.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">12. Contributing to PRRTE</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#open-source-contributions">12.1. Open source contributions</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#contributor-s-declaration">12.1.1. Contributor’s Declaration</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">12. </span>Contributing to PRRTE</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/contributing.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="contributing-to-prrte">
<h1><span class="section-number">12. </span>Contributing to PRRTE<a class="headerlink" href="#contributing-to-prrte" title="Permalink to this heading"></a></h1>
<div class="section" id="open-source-contributions">
<h2><span class="section-number">12.1. </span>Open source contributions<a class="headerlink" href="#open-source-contributions" title="Permalink to this heading"></a></h2>
<p>All code contributions are submitted as pull requests on the <a class="reference external" href="https://github.com/openpmix/prrte/">PRRTE
GitHub repository</a>.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>All commits must include a <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> line,
indicating the submitter’s agreement to the <a class="reference internal" href="#contributing-contributors-declaration-label"><span class="std std-ref">PRRTE
Contributor’s Declaration</span></a>.</p>
</div>
<div class="section" id="contributor-s-declaration">
<span id="contributing-contributors-declaration-label"></span><h3><span class="section-number">12.1.1. </span>Contributor’s Declaration<a class="headerlink" href="#contributor-s-declaration" title="Permalink to this heading"></a></h3>
<p>In order to ensure that we can keep distributing PRRTE under our
<a class="reference internal" href="license.html"><span class="doc">open source license</span></a>, we need to ensure that
all contributions are compatible with that license. Put differently:
we need to have an established intellectual property pedigree of the
code in PRRTE. This means being able to ensure that all code
included in PRRTE is free, open source, and able to be distributed
under <a class="reference internal" href="license.html"><span class="doc">the BSD license</span></a>.</p>
<p>PRRTE has therefore adopted requirements based on the signed-off-by
process as described in Section 11 of the Linux kernel document on
<a class="reference external" href="https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin">Submitting Patches</a>.
Each proposed contribution to the PRRTE code base must include the
text <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> followed by the contributor’s name and email
address. This is a developer’s certification that he or she has the
right to submit the patch for inclusion into the project, and
indicates agreement to the Developer’s Certificate of Origin:</p>
<blockquote>
<div><p>By making a contribution to this project, I certify that:</p>
<ol class="arabic simple">
<li><p>The contribution was created in whole or in part by me and I
have the right to submit it under the <a class="reference internal" href="license.html"><span class="doc">PRRTE open
source license</span></a>; or</p></li>
<li><p>The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part by
me, under the <a class="reference internal" href="license.html"><span class="doc">PRRTE open source license</span></a> (unless I am permitted to submit under a
different license); or</p></li>
<li><p>The contribution was provided directly to me by some other
person who certified (1) or (2) and I have not modified it.</p></li>
<li><p>I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off)
is maintained indefinitely and may be redistributed consistent
with this project and the open source license(s) involved.</p></li>
</ol>
</div></blockquote>
<p>Proposed contributions failing to include the <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code>
certification will not be accepted into any PRRTE code
repository. The community reserves the right to revert any commit
inadvertently made without the required certification.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This policy prevents a situation where intellectual property
gets into the PRRTE code base and then someone later
claims that we owe them money for it. PRRTE is a free,
open source code base. We intend it to remain that way.</p>
</div>
<p>If you have not already done so, please ensure that <em>every</em> commit in
your pull request contains the <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> line.</p>
<div class="tip admonition">
<p class="admonition-title">Pro tip</p>
<p>You can use the <code class="docutils literal notranslate"><span class="pre">-s</span></code> flag to the <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> command (i.e.,
<code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-s</span> <span class="pre">...</span></code>) to automatically add the appropriate
<code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> line to your commit message.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="developers/rst-for-markdown-expats.html" class="btn btn-neutral float-left" title="11.5. ReStructured Text for those who know Markdown" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="license.html" class="btn btn-neutral float-right" title="13. License" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,197 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.2. GitHub, Git, and related topics &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.3. Manually installing the GNU Autootools" href="gnu-autotools.html" />
<link rel="prev" title="11.1. Prerequisites" href="prerequisites.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Developer’s guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.2. GitHub, Git, and related topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#github">11.2.1. GitHub</a></li>
<li class="toctree-l3"><a class="reference internal" href="#git-commits-open-source-contributor-s-declaration">11.2.2. Git commits: open source / contributor’s declaration</a></li>
<li class="toctree-l3"><a class="reference internal" href="#git-branch-scheme">11.2.3. Git branch scheme</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Developer’s guide</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.2. </span>GitHub, Git, and related topics</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/git-github.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="github-git-and-related-topics">
<h1><span class="section-number">11.2. </span>GitHub, Git, and related topics<a class="headerlink" href="#github-git-and-related-topics" title="Permalink to this heading"></a></h1>
<div class="section" id="github">
<h2><span class="section-number">11.2.1. </span>GitHub<a class="headerlink" href="#github" title="Permalink to this heading"></a></h2>
<p>PRRTE’s Git repositories are <a class="reference external" href="https://github.com/openpmix/prrte">hosted at GitHub</a>.</p>
<ol class="arabic">
<li><p>First, you will need a Git client. We recommend getting the latest
version available. If you do not have the command <code class="docutils literal notranslate"><span class="pre">git</span></code> in your
path, you will likely need to download and install Git.</p></li>
<li><p><a class="reference external" href="https://github.com/openpmix/prrte/">prrte</a> is the main PRRTE
repository where most active development is done. Git clone this
repository. Note that the use of the <code class="docutils literal notranslate"><span class="pre">--recursive</span></code> CLI option is
necessary because PRRTE uses Git submodules:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>shell$ git clone --recursive https://github.com/openpmix/prrte.git
</pre></div>
</div>
</li>
</ol>
<p>Note that Git is natively capable of using many forms of web
proxies. If your network setup requires the user of a web proxy,
<a class="reference external" href="https://git-scm.com/">consult the Git documentation for more details</a>.</p>
</div>
<div class="section" id="git-commits-open-source-contributor-s-declaration">
<h2><span class="section-number">11.2.2. </span>Git commits: open source / contributor’s declaration<a class="headerlink" href="#git-commits-open-source-contributor-s-declaration" title="Permalink to this heading"></a></h2>
<p>In order to remain open source, all new commits to the PRRTE
repository must include a <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> line, indicating the
submitter’s agreement to the <a class="reference internal" href="../contributing.html#contributing-contributors-declaration-label"><span class="std std-ref">PRRTE Contributor’s Declaration</span></a>.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>You can use the <code class="docutils literal notranslate"><span class="pre">-s</span></code> option to <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> to
automatically add the <code class="docutils literal notranslate"><span class="pre">Signed-off-by:</span></code> line to your commit
message.</p>
</div>
</div>
<div class="section" id="git-branch-scheme">
<span id="git-github-branch-scheme-label"></span><h2><span class="section-number">11.2.3. </span>Git branch scheme<a class="headerlink" href="#git-branch-scheme" title="Permalink to this heading"></a></h2>
<p>Generally, PRRTE has two types of branches in its Git repository:</p>
<ol class="arabic simple">
<li><p><code class="docutils literal notranslate"><span class="pre">main</span></code>:</p>
<ul class="simple">
<li><p>All active development occurs on the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch (new features,
bug fixes, etc.).</p></li>
</ul>
</li>
<li><p>Release branches of the form <code class="docutils literal notranslate"><span class="pre">vMAJOR.MINOR.x</span></code> (e.g., <code class="docutils literal notranslate"><span class="pre">v4.0.x</span></code>,
<code class="docutils literal notranslate"><span class="pre">v4.1.x</span></code>, <code class="docutils literal notranslate"><span class="pre">v5.0.x</span></code>).</p>
<ul class="simple">
<li><p>The <code class="docutils literal notranslate"><span class="pre">.x</span></code> suffix indicates that this branch is used to create
all releases in the PRRTE vMAJOR.MINOR series.</p></li>
<li><p>Periodically, the PRRTE community will make a new release
branch, typically from <code class="docutils literal notranslate"><span class="pre">main</span></code>.</p></li>
<li><p>A Git tag of the form <code class="docutils literal notranslate"><span class="pre">vMAJOR.MINOR.RELEASE</span></code> is used to
indicate the specific commit on a release branch from where
official PRRTE release tarball was created (e.g., <code class="docutils literal notranslate"><span class="pre">v4.1.0</span></code>,
<code class="docutils literal notranslate"><span class="pre">v4.1.1</span></code>, <code class="docutils literal notranslate"><span class="pre">v4.1.2</span></code>, etc.).</p></li>
</ul>
</li>
</ol>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="prerequisites.html" class="btn btn-neutral float-left" title="11.1. Prerequisites" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="gnu-autotools.html" class="btn btn-neutral float-right" title="11.3. Manually installing the GNU Autootools" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,484 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.3. Manually installing the GNU Autootools &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.4. Installing and running Sphinx (building the PRRTE docs)" href="sphinx.html" />
<link rel="prev" title="11.2. GitHub, Git, and related topics" href="git-github.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Developer’s guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.3. Manually installing the GNU Autootools</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#use-a-package-manager">11.3.1. Use a package manager</a></li>
<li class="toctree-l3"><a class="reference internal" href="#autotools-versions">11.3.2. Autotools versions</a></li>
<li class="toctree-l3"><a class="reference internal" href="#checking-your-versions">11.3.3. Checking your versions</a></li>
<li class="toctree-l3"><a class="reference internal" href="#installing-the-gnu-autotools-from-source">11.3.4. Installing the GNU Autotools from source</a></li>
<li class="toctree-l3"><a class="reference internal" href="#build-and-install-ordering">11.3.5. Build and install ordering</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Developer’s guide</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.3. </span>Manually installing the GNU Autootools</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/gnu-autotools.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="manually-installing-the-gnu-autootools">
<span id="developers-installing-autotools-label"></span><h1><span class="section-number">11.3. </span>Manually installing the GNU Autootools<a class="headerlink" href="#manually-installing-the-gnu-autootools" title="Permalink to this heading"></a></h1>
<p>There is enough detail in building the GNU Autotools that it warrants
its own section.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>As noted above, you only need to read/care about this
section if you are building PRRTE from a Git clone. End
users installing an PRRTE distribution tarball do <em>not</em>
need to have the GNU Autotools installed.</p>
</div>
<div class="section" id="use-a-package-manager">
<h2><span class="section-number">11.3.1. </span>Use a package manager<a class="headerlink" href="#use-a-package-manager" title="Permalink to this heading"></a></h2>
<p>It is recommended that you use your Linux distribution’s package
manager, or Homebrew or MacPorts on macOS to install recent versions
of GNU Autoconf, Automake, and Libtool.</p>
<p>If you cannot, keep reading in this section to see how to build and
install these applications manually (i.e., download the source from
the internet and build/install it yourself).</p>
</div>
<div class="section" id="autotools-versions">
<h2><span class="section-number">11.3.2. </span>Autotools versions<a class="headerlink" href="#autotools-versions" title="Permalink to this heading"></a></h2>
<p>The following tools are required for developers to compile PRRTE
from its repository sources (users who download PRRTE tarballs do
not need these tools - they are only required for developers working
on the internals of PRRTE itself):</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Software package</p></th>
<th class="head"><p>Notes</p></th>
<th class="head"><p>URL</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>GNU m4</p></td>
<td><p>See version chart below</p></td>
<td><p><a class="reference external" href="https://ftp.gnu.org/gnu/m4/">https://ftp.gnu.org/gnu/m4/</a></p></td>
</tr>
<tr class="row-odd"><td><p>GNU Autoconf</p></td>
<td><p>See version chart below</p></td>
<td><p><a class="reference external" href="https://ftp.gnu.org/gnu/autoconf/">https://ftp.gnu.org/gnu/autoconf/</a></p></td>
</tr>
<tr class="row-even"><td><p>GNU Automake</p></td>
<td><p>See version chart below</p></td>
<td><p><a class="reference external" href="https://ftp.gnu.org/gnu/automake/">https://ftp.gnu.org/gnu/automake/</a></p></td>
</tr>
<tr class="row-odd"><td><p>GNU Libtool</p></td>
<td><p>See version chart below</p></td>
<td><p><a class="reference external" href="https://ftp.gnu.org/gnu/libtool/">https://ftp.gnu.org/gnu/libtool/</a></p></td>
</tr>
</tbody>
</table>
<p>The table below lists the versions that are used to make nightly
snapshot and official release PRRTE tarballs. Other versions of the
tools <em>may</em> work for some (but almost certainly not all) platforms;
the ones listed below are the versions that we know work across an
extremely wide variety of platforms and environments.</p>
<p>To strengthen the above point: the core PRRTE developers typically
use very, very recent versions of the GNU tools. There are known bugs
in older versions of the GNU tools that PRRTE no longer compensates
for (it seemed senseless to indefinitely support patches for ancient
versions of Autoconf, for example).</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>You <strong>will</strong> have problems if you do not use recent
versions of the GNU Autotools.</p>
</div>
<p>That being said, <code class="docutils literal notranslate"><span class="pre">autogen.pl</span></code> and <code class="docutils literal notranslate"><span class="pre">configure.ac</span></code> scripts tend to
be a bit lenient and enforce slightly older minimum versions than the
ones listed below. This is because such older versions still make
usable PRRTE builds on many platforms - especially Linux on x86_64
with GNU compilers - and are convenient for developers whose Linux
distribution may not have as recent as the versions listed below (but are
recent enough to produce a working version for their platform).</p>
<p>To be clear: the versions listed below are required to support a wide
variety of platforms and environments, and are used to make nightly
and official release tarballs. When building PRRTE, YMMV when using
versions older than those listed below — especially if you are
not building on Linux x86_64 with the GNU compilers.</p>
<p>Using older versions is unsupported. If you run into problems, upgrade
to at least the versions listed below.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You may need to scroll right in the following table.</p>
</div>
<div class="error admonition">
<p class="admonition-title">PRRTE Docs TODO</p>
<p>The table below is almost certainly wrong; it has all the values
from Open MPI. Need to update the table below with the appropriate
values for PRRTE.</p>
</div>
<table class="docutils align-default">
<colgroup>
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>PRRTE</p></th>
<th class="head"><p>M4</p></th>
<th class="head"><p>Autoconf</p></th>
<th class="head"><p>Automake</p></th>
<th class="head"><p>Libtool</p></th>
<th class="head"><p>Flex</p></th>
<th class="head"><p>Sphinx</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>v1.0.x</p></td>
<td><p>NA</p></td>
<td><p>2.58 - 2.59</p></td>
<td><p>1.7 - 1.9.6</p></td>
<td><p>1.5.16 - 1.5.22</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v1.1.x</p></td>
<td><p>NA</p></td>
<td><p>2.59</p></td>
<td><p>1.9.6</p></td>
<td><p>1.5.16 - 1.5.22</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v1.2.x</p></td>
<td><p>NA</p></td>
<td><p>2.59</p></td>
<td><p>1.9.6</p></td>
<td><p>1.5.22 - 2.1a</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v1.3.x</p></td>
<td><p>1.4.11</p></td>
<td><p>2.63</p></td>
<td><p>1.10.1</p></td>
<td><p>2.2.6b</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v1.4.x</p></td>
<td><p>1.4.11</p></td>
<td><p>2.63</p></td>
<td><p>1.10.3</p></td>
<td><p>2.2.6b</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v1.5.x for x=0-4</p></td>
<td><p>1.4.13</p></td>
<td><p>2.65</p></td>
<td><p>1.11.1</p></td>
<td><p>2.2.6b</p></td>
<td><p>2.5.4</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v1.5.x for x&gt;=5</p></td>
<td><p>1.4.16</p></td>
<td><p>2.68</p></td>
<td><p>1.11.3</p></td>
<td><p>2.4.2</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v1.6.x</p></td>
<td><p>1.4.16</p></td>
<td><p>2.68</p></td>
<td><p>1.11.3</p></td>
<td><p>2.4.2</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v1.7.x</p></td>
<td><p>1.4.16</p></td>
<td><p>2.69</p></td>
<td><p>1.12.2</p></td>
<td><p>2.4.2</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v1.8.x</p></td>
<td><p>1.4.16</p></td>
<td><p>2.69</p></td>
<td><p>1.12.2</p></td>
<td><p>2.4.2</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v1.10.x</p></td>
<td><p>1.4.16</p></td>
<td><p>2.69</p></td>
<td><p>1.12.2</p></td>
<td><p>2.4.2</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-odd"><td><p>v2.0.x through v4.y</p></td>
<td><p>1.4.17</p></td>
<td><p>2.69</p></td>
<td><p>1.15</p></td>
<td><p>2.4.6</p></td>
<td><p>2.5.35</p></td>
<td><p>NA</p></td>
</tr>
<tr class="row-even"><td><p>v5.0.x</p></td>
<td><p>1.4.17</p></td>
<td><p>2.69</p></td>
<td><p>1.15</p></td>
<td><p>2.4.6</p></td>
<td><p>2.5.35</p></td>
<td><p>4.2.0</p></td>
</tr>
<tr class="row-odd"><td><p>Git main</p></td>
<td><p>1.4.17</p></td>
<td><p>2.69</p></td>
<td><p>1.15</p></td>
<td><p>2.4.6</p></td>
<td><p>2.5.35</p></td>
<td><p>4.2.0</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="checking-your-versions">
<h2><span class="section-number">11.3.3. </span>Checking your versions<a class="headerlink" href="#checking-your-versions" title="Permalink to this heading"></a></h2>
<p>You can check what versions of the Autotools you have installed with
the following:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>m4<span class="w"> </span>--version
shell$<span class="w"> </span>autoconf<span class="w"> </span>--version
shell$<span class="w"> </span>automake<span class="w"> </span>--version
shell$<span class="w"> </span>libtoolize<span class="w"> </span>--version
</pre></div>
</div>
</div>
<div class="section" id="installing-the-gnu-autotools-from-source">
<h2><span class="section-number">11.3.4. </span>Installing the GNU Autotools from source<a class="headerlink" href="#installing-the-gnu-autotools-from-source" title="Permalink to this heading"></a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Most operating system packaging systems (to include Homebrew
and MacPorts on MacOS) install recent-enough versions of the
GNU Autotools. You should generally only install the GNU
Autotools manually if you can’t use your operating system
packaging system to install them for you.</p>
</div>
<p>The GNU Autotools sources can be can be downloaded from:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://ftp.gnu.org/gnu/autoconf/">https://ftp.gnu.org/gnu/autoconf/</a></p></li>
<li><p><a class="reference external" href="https://ftp.gnu.org/gnu/automake/">https://ftp.gnu.org/gnu/automake/</a></p></li>
<li><p><a class="reference external" href="https://ftp.gnu.org/gnu/libtool/">https://ftp.gnu.org/gnu/libtool/</a></p></li>
<li><p>And if you need it: <a class="reference external" href="https://ftp.gnu.org/gnu/m4/">https://ftp.gnu.org/gnu/m4/</a></p></li>
</ul>
<p>It is certainly easiest to download/build/install all four of these
tools together. But note that PRRTE has no specific m4
requirements; it is only listed here because Autoconf requires minimum
versions of GNU m4. Hence, you may or may not <em>need</em> to actually
install a new version of GNU m4. That being said, if you are confused
or don’t know, just install the latest GNU m4 with the rest of the GNU
Autotools and everything will work out fine.</p>
</div>
<div class="section" id="build-and-install-ordering">
<h2><span class="section-number">11.3.5. </span>Build and install ordering<a class="headerlink" href="#build-and-install-ordering" title="Permalink to this heading"></a></h2>
<p>You must build and install the GNU Autotools in the following order:</p>
<ol class="arabic simple">
<li><p>m4</p></li>
<li><p>Autoconf</p></li>
<li><p>Automake</p></li>
<li><p>Libtool</p></li>
</ol>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You <em>must</em> install the last three tools (Autoconf,
Automake, Libtool) into the same prefix directory.
These three tools are somewhat inter-related, and if
they’re going to be used together, they <em>must</em> share a
common installation prefix.</p>
</div>
<p>You can install m4 anywhere as long as it can be found in the path;
it may be convenient to install it in the same prefix as the other
three. Or you can use any recent-enough m4 that is in your path.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>It is <em>strongly</em> encouraged that you do <strong>not</strong> install
your new versions over the OS-installed versions. This could cause
other things on your system to break. Instead, install into
<code class="docutils literal notranslate"><span class="pre">$HOME/local</span></code>, or <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code>, or wherever else you tend to
install “local” kinds of software.</p>
<p>In doing so, be sure to prefix your <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> with the directory
where they are installed. For example, if you install into
<code class="docutils literal notranslate"><span class="pre">$HOME/local</span></code>, you may want to edit your shell startup file
(<code class="docutils literal notranslate"><span class="pre">.bashrc</span></code>, <code class="docutils literal notranslate"><span class="pre">.cshrc</span></code>, <code class="docutils literal notranslate"><span class="pre">.tcshrc</span></code>, etc.) to have something
like</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># For bash/sh:</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$HOME</span>/local/bin:<span class="nv">$PATH</span>
<span class="c1"># For csh/tcsh:</span>
<span class="nb">set</span><span class="w"> </span><span class="nv">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">(</span><span class="nv">$HOME</span>/local/bin<span class="w"> </span><span class="nv">$path</span><span class="o">)</span>
</pre></div>
</div>
<p>Ensure to set your <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> <em>before</em> you configure/build/install
the four packages.</p>
</div>
<p>All four packages require two simple commands to build and
install:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>M4_DIRECTORY
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>PREFIX
shell$<span class="w"> </span>make<span class="w"> </span>all<span class="w"> </span>install
</pre></div>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>If you are using a shell that does not automatically
re-index the <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> (e.g., the <code class="docutils literal notranslate"><span class="pre">csh</span></code> or <code class="docutils literal notranslate"><span class="pre">tcsh</span></code>
shells), be sure to run the <code class="docutils literal notranslate"><span class="pre">rehash</span></code> command before
you install the next package so that the executables
that were just installed can be found by the next
package.</p>
</div>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Make $PATH be re-indexed if necessary, e.g., via &quot;rehash&quot;</span>
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>AUTOCONF_DIRECTORY
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>PREFIX
shell$<span class="w"> </span>make<span class="w"> </span>all<span class="w"> </span>install
</pre></div>
</div>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Make $PATH be re-indexed if necessary, e.g., via &quot;rehash&quot;</span>
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>AUTOMAKE_DIRECTORY
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>PREFIX
shell$<span class="w"> </span>make<span class="w"> </span>all<span class="w"> </span>install
</pre></div>
</div>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Make $PATH be re-indexed if necessary, e.g., via &quot;rehash&quot;</span>
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>LIBTOOL_DIRECTORY
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>PREFIX
shell$<span class="w"> </span>make<span class="w"> </span>all<span class="w"> </span>install
</pre></div>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="git-github.html" class="btn btn-neutral float-left" title="11.2. GitHub, Git, and related topics" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="sphinx.html" class="btn btn-neutral float-right" title="11.4. Installing and running Sphinx (building the PRRTE docs)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,148 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11. Developer’s guide &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.1. Prerequisites" href="prerequisites.html" />
<link rel="prev" title="10. Session directory" href="../session-directory.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">11. Developer’s guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l2"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">11. </span>Developer’s guide</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="developer-s-guide">
<h1><span class="section-number">11. </span>Developer’s guide<a class="headerlink" href="#developer-s-guide" title="Permalink to this heading"></a></h1>
<p>This section is here for those who are building/exploring the
internals of PRRTE in its source code form, most likely through a
developer’s tree (i.e., a Git clone).</p>
<p>If you are simply <em>using</em> PRRTE, you probably don’t need to read this
section.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l1"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l1"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l1"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l1"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../session-directory.html" class="btn btn-neutral float-left" title="10. Session directory" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="prerequisites.html" class="btn btn-neutral float-right" title="11.1. Prerequisites" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,265 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.1. Prerequisites &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.2. GitHub, Git, and related topics" href="git-github.html" />
<link rel="prev" title="11. Developer’s guide" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Developer’s guide</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.1. Prerequisites</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#compilers">11.1.1. Compilers</a></li>
<li class="toctree-l3"><a class="reference internal" href="#gnu-autotools">11.1.2. GNU Autotools</a></li>
<li class="toctree-l3"><a class="reference internal" href="#perl">11.1.3. Perl</a></li>
<li class="toctree-l3"><a class="reference internal" href="#flex">11.1.4. Flex</a></li>
<li class="toctree-l3"><a class="reference internal" href="#sphinx-and-therefore-python">11.1.5. Sphinx (and therefore Python)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l2"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Developer’s guide</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.1. </span>Prerequisites</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/prerequisites.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="prerequisites">
<h1><span class="section-number">11.1. </span>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this heading"></a></h1>
<div class="section" id="compilers">
<h2><span class="section-number">11.1.1. </span>Compilers<a class="headerlink" href="#compilers" title="Permalink to this heading"></a></h2>
<p>Although it should probably be assumed, you’ll need a C compiler that
supports C99.</p>
</div>
<div class="section" id="gnu-autotools">
<h2><span class="section-number">11.1.2. </span>GNU Autotools<a class="headerlink" href="#gnu-autotools" title="Permalink to this heading"></a></h2>
<p>When building PRRTE from its repository sources, the GNU Autotools
must be installed (i.e., <a class="reference external" href="https://www.gnu.org/software/autoconf/">GNU Autoconf</a>, <a class="reference external" href="https://www.gnu.org/software/automake/">GNU Automake</a>, and <a class="reference external" href="https://www.gnu.org/software/libtool/">GNU Libtool</a>).</p>
<table class="colwidths-given docutils align-default">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Tool</p></th>
<th class="head"><p>Minimum version</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Autoconf</p></td>
<td><p>2.69.0</p></td>
</tr>
<tr class="row-odd"><td><p>Automake</p></td>
<td><p>1.13.4</p></td>
</tr>
<tr class="row-even"><td><p>Libtool</p></td>
<td><p>2.4.2</p></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The GNU Autotools are <em>not</em> required when building PRRTE
from distribution tarballs. PRRTE distribution tarballs
are bootstrapped such that end-users do not need to have the
GNU Autotools installed.</p>
</div>
<p>You can generally install GNU Autoconf, Automake, and Libtool via your
Linux distribution native package system, or via Homebrew or MacPorts
on MacOS. This usually “just works.”</p>
<p>If you run into problems with the GNU Autotools, or need to download /
build them manually, see the <a class="reference internal" href="gnu-autotools.html#developers-installing-autotools-label"><span class="std std-ref">how to build and install GNU
Autotools section</span></a> for much
more detail.</p>
</div>
<div class="section" id="perl">
<h2><span class="section-number">11.1.3. </span>Perl<a class="headerlink" href="#perl" title="Permalink to this heading"></a></h2>
<p>PRRTE still uses Perl for a few of its build scripts (most notably,
<code class="docutils literal notranslate"><span class="pre">autogen.pl</span></code>).</p>
<p>Generally speaking, any recent-ish release of Perl 5 should be
sufficient to correctly execute PRRTE’s Perl scripts.</p>
</div>
<div class="section" id="flex">
<h2><span class="section-number">11.1.4. </span>Flex<a class="headerlink" href="#flex" title="Permalink to this heading"></a></h2>
<p>Minimum supported version: 2.5.4.</p>
<p><a class="reference external" href="https://github.com/westes/flex">Flex</a> is used during the
compilation of a developer’s checkout (it is not used to build
official distribution tarballs). Other flavors of lex are <em>not</em>
supported: given the choice of making parsing code portable between
all flavors of lex and doing more interesting work on PRRTE, we
greatly prefer the latter.</p>
<p>Note that no testing has been performed to see what the minimum
version of Flex is required by PRRTE. We suggest that you use
v2.5.35 at the earliest.</p>
<p>For now, PRRTE will allow developer builds with Flex 2.5.4. This
is primarily motivated by the fact that RedHat/CentOS 5 ships with
Flex 2.5.4. It is likely that someday PRRTE developer builds will
require Flex version &gt;=2.5.35.</p>
<p>Note that the <code class="docutils literal notranslate"><span class="pre">flex</span></code>-generated code generates some compiler warnings
on some platforms, but the warnings do not seem to be consistent or
uniform on all platforms, compilers, and flex versions. As such, we
have done little to try to remove those warnings.</p>
<p>If you do not have Flex installed and cannot easily install it via
your operating system’s packaging system (to include Homebrew or
MacPorts on MacOS), see <a class="reference external" href="https://github.com/westes/flex">the Flex Github repository</a>.</p>
</div>
<div class="section" id="sphinx-and-therefore-python">
<h2><span class="section-number">11.1.5. </span>Sphinx (and therefore Python)<a class="headerlink" href="#sphinx-and-therefore-python" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="https://www.sphinx-doc.org/">Sphinx</a> is a Python-based tool used to
generate both the HTML version of the documentation (that you are
reading right now) and the nroff man pages.</p>
<p>Official PRRTE distribution tarballs contain pre-built HTML
documentation and man pages. This means that – similar to the GNU
Autotools – end users do not need to have Sphinx installed, but will
still have both the HTML documentation and man pages installed as part
of the normal configure / build / install process.</p>
<p>However, the HTML documentation and man pages are <em>not</em> stored in PRRTE’s
Git repository; only the ReStructred Text source code of the
documentation is in the Git repository. Hence, if you are building
PRRTE from a Git clone, you will need Sphinx (and some Python
modules) in order to build the HTML documentation and man pages.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Most systems do not have Sphinx and/or the required
Python modules installed by default. <a class="reference internal" href="sphinx.html#developers-installing-sphinx-label"><span class="std std-ref">See the
Installing Sphinx section</span></a> for details on
how to install Sphinx and the required Python modules.</p>
</div>
<p>If <code class="docutils literal notranslate"><span class="pre">configure</span></code> is able to find Sphinx and the required Python
modules, it will automatically generate the HTML documentation and man
pages during the normal build procedure (i.e., during <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">all</span></code>).
If <code class="docutils literal notranslate"><span class="pre">configure</span></code> is <em>not</em> able to find Sphinx and/or the required
Python modules, it will simply skip building the documentation.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you have built/installed PRRTE from a Git clone and
unexpectedly did not have the man pages installed, it is
likely that you do not have Sphinx and/or the required
Python modules available.</p>
<p><a class="reference internal" href="sphinx.html#developers-installing-sphinx-label"><span class="std std-ref">See the Installing Sphinx section</span></a> for details on how
to install Sphinx and the required Python modules.</p>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">dist</span></code> will fail if <code class="docutils literal notranslate"><span class="pre">configure</span></code> did not find
Sphinx and/or the required Python modules.
Specifically: if <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">dist</span></code> is not able to generate
the most up-to-date HTML documentation and man pages,
you cannot build a distribution tarball. <strong>This is an
intentional design decision.</strong></p>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="11. Developer’s guide" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="git-github.html" class="btn btn-neutral float-right" title="11.2. GitHub, Git, and related topics" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,557 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.5. ReStructured Text for those who know Markdown &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="12. Contributing to PRRTE" href="../contributing.html" />
<link rel="prev" title="11.4. Installing and running Sphinx (building the PRRTE docs)" href="sphinx.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Developer’s guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l2"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx.html">11.4. Installing and running Sphinx (building the PRRTE docs)</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.5. ReStructured Text for those who know Markdown</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#whitespace-and-indenting">11.5.1. Whitespace and indenting</a></li>
<li class="toctree-l3"><a class="reference internal" href="#fixed-width-font">11.5.2. Fixed width font</a></li>
<li class="toctree-l3"><a class="reference internal" href="#italics">11.5.3. Italics</a></li>
<li class="toctree-l3"><a class="reference internal" href="#boldface">11.5.4. Boldface</a></li>
<li class="toctree-l3"><a class="reference internal" href="#chapter-and-section-delimiters">11.5.5. Chapter and section delimiters</a></li>
<li class="toctree-l3"><a class="reference internal" href="#multi-line-code-fixed-width-font">11.5.6. Multi-line code/fixed-width font</a></li>
<li class="toctree-l3"><a class="reference internal" href="#un-numbered-bullets">11.5.7. Un-numbered bullets</a></li>
<li class="toctree-l3"><a class="reference internal" href="#numbered-bullets">11.5.8. Numbered bullets:</a></li>
<li class="toctree-l3"><a class="reference internal" href="#comments">11.5.9. Comments</a></li>
<li class="toctree-l3"><a class="reference internal" href="#including-files">11.5.10. Including files</a></li>
<li class="toctree-l3"><a class="reference internal" href="#hyperlinks-to-urls">11.5.11. Hyperlinks to URLs</a></li>
<li class="toctree-l3"><a class="reference internal" href="#hyperlinks-to-anchors">11.5.12. Hyperlinks to anchors</a></li>
<li class="toctree-l3"><a class="reference internal" href="#hyperlinks-to-other-rst-pages">11.5.13. Hyperlinks to other (RST) pages</a></li>
<li class="toctree-l3"><a class="reference internal" href="#macros">11.5.14. Macros</a></li>
<li class="toctree-l3"><a class="reference internal" href="#brightly-colored-boxes">11.5.15. Brightly-colored boxes</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Developer’s guide</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.5. </span>ReStructured Text for those who know Markdown</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/rst-for-markdown-expats.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="restructured-text-for-those-who-know-markdown">
<span id="developers-rst-for-markdown-expats"></span><h1><span class="section-number">11.5. </span>ReStructured Text for those who know Markdown<a class="headerlink" href="#restructured-text-for-those-who-know-markdown" title="Permalink to this heading"></a></h1>
<p>You can think of RST as “Markdown, but much better”. Meaning:</p>
<ol class="arabic simple">
<li><p>RST is basically just as simple as Markdown</p></li>
<li><p>But RST is both more precise, and has more available formatting
constructs (without getting crazy complicated)</p></li>
</ol>
<p>The full Sphinx / RST documentation is available here:
<a class="reference external" href="https://www.sphinx-doc.org/en/master/index.html">https://www.sphinx-doc.org/en/master/index.html</a></p>
<p>If you’re familiar with Markdown, the following sections contain some
tips to get you started in RST.</p>
<div class="section" id="whitespace-and-indenting">
<h2><span class="section-number">11.5.1. </span>Whitespace and indenting<a class="headerlink" href="#whitespace-and-indenting" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Whitespace and indenting generally doesn’t matter in most
cases. It does matter with bullets and sub bullets, but the rules
get pretty weird, and vary between different Markdown renderers.</p></li>
<li><p>RST: <strong>Indenting matters</strong>. A lot. Just like Python. In
general, you indent all RST text to keep it within the same level.
For example, all this text would be a single paragraph</p>
<p><strong>Blank lines also matter</strong>. A lot. You use blank lines to
delimit sections within an indenting level. For example, the
blank line before this paragraph denotes a paragraph break.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>RST was created by the Python community. Hence,
whitespace is quite important.</p>
<ul class="simple">
<li><p>Indenting matters</p></li>
<li><p>Blank lines between content matter</p></li>
</ul>
</div>
</li>
</ul>
<p>Using a blank line and outdenting indicates the end of the previous
item. For example, this paragraph is not part of the MD/RST
bulleted list.</p>
</div>
<div class="section" id="fixed-width-font">
<h2><span class="section-number">11.5.2. </span>Fixed width font<a class="headerlink" href="#fixed-width-font" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Use single quotes:</p>
<div class="highlight-md notranslate"><div class="highlight"><pre><span></span><span class="sb">`hello world`</span>
</pre></div>
</div>
</li>
<li><p>RST: Use a pair of single quotes:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="s">``hello world``</span>
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="italics">
<h2><span class="section-number">11.5.3. </span>Italics<a class="headerlink" href="#italics" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>MD: <code class="docutils literal notranslate"><span class="pre">*hello</span> <span class="pre">world*</span></code> or <code class="docutils literal notranslate"><span class="pre">_hello</span> <span class="pre">world_</span></code></p></li>
<li><p>RST: <code class="docutils literal notranslate"><span class="pre">*hello</span> <span class="pre">world*</span></code></p></li>
</ul>
</div>
<div class="section" id="boldface">
<h2><span class="section-number">11.5.4. </span>Boldface<a class="headerlink" href="#boldface" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>MD: <code class="docutils literal notranslate"><span class="pre">**hello</span> <span class="pre">world**</span></code></p></li>
<li><p>RST: Same as MD</p></li>
</ul>
</div>
<div class="section" id="chapter-and-section-delimiters">
<h2><span class="section-number">11.5.5. </span>Chapter and section delimiters<a class="headerlink" href="#chapter-and-section-delimiters" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Either use one or more pound signs (#, ##, ###) to the left of
the line of text, or underline the line of text with pound signs</p></li>
<li><p>RST: Have a single line of text, underlined by non-ASCII
characters.</p>
<ul>
<li><p>The length of the underlying <em>must</em> be at least as long as the
line of text</p></li>
<li><p>Which non-ASCII character is used for the underlying does not
matter, but the order in which they are used denotes chapters
/ sections / subsections / etc.</p>
<p>In these PRRTE docs, the sequence of underline characters we use
are:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Chapter 1: hello world</span>
<span class="gh">======================</span>
</pre></div>
</div>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Section 1: hello world</span>
<span class="gh">----------------------</span>
</pre></div>
</div>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Subsection 1: hello world</span>
<span class="gh">^^^^^^^^^^^^^^^^^^^^^^^^^</span>
</pre></div>
</div>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Subsubsection 1: hello world</span>
<span class="gh">++++++++++++++++++++++++++++</span>
</pre></div>
</div>
<p>Meaning: underlines made of <code class="docutils literal notranslate"><span class="pre">=</span></code> denotes chapters, underlines
made of <code class="docutils literal notranslate"><span class="pre">-</span></code> denotes sections, underlines made of <code class="docutils literal notranslate"><span class="pre">^</span></code> denotes
subsections, and underlines made of <code class="docutils literal notranslate"><span class="pre">+</span></code> denote subsubsections.</p>
</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="multi-line-code-fixed-width-font">
<h2><span class="section-number">11.5.6. </span>Multi-line code/fixed-width font<a class="headerlink" href="#multi-line-code-fixed-width-font" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Use three single quotes to delimit blocks of text. Optionally
include a token keyword to denote the syntax highlighting to use
inside that block.</p>
<div class="highlight-md notranslate"><div class="highlight"><pre><span></span><span class="sb">```c</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Hello world</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">}</span>
<span class="sb">```</span>
</pre></div>
</div>
</li>
<li><p>RST: Use <code class="docutils literal notranslate"><span class="pre">..</span> <span class="pre">code-block::</span> <span class="pre">KEYWORD</span></code> to start a section of code.</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> c
int main() { printf(&quot;Hello world\n&quot;); return 0 }
</pre></div>
</div>
<ul>
<li><p>KEYWORD indicates which syntax highlighting to use (e.g., <code class="docutils literal notranslate"><span class="pre">c</span></code>,
<code class="docutils literal notranslate"><span class="pre">c++</span></code> <code class="docutils literal notranslate"><span class="pre">make</span></code>, <code class="docutils literal notranslate"><span class="pre">sh</span></code>, <code class="docutils literal notranslate"><span class="pre">ini</span></code>, <code class="docutils literal notranslate"><span class="pre">Fortran</span></code>, <code class="docutils literal notranslate"><span class="pre">diff</span></code>,
<code class="docutils literal notranslate"><span class="pre">python</span></code>, <code class="docutils literal notranslate"><span class="pre">java</span></code>, <code class="docutils literal notranslate"><span class="pre">rst</span></code>, … etc.).</p></li>
<li><p>KEYWORD can be omitted if no specific highlighting is to be
used.</p></li>
<li><p>There <em>MUST</em> be a blank line after the <code class="docutils literal notranslate"><span class="pre">code-block</span></code> line.</p></li>
<li><p>The lines in the block must be indented to the same column as the
first <code class="docutils literal notranslate"><span class="pre">c</span></code> in <code class="docutils literal notranslate"><span class="pre">code-block</span></code>. For example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">sh</span>
shell$<span class="w"> </span>tar<span class="w"> </span>xf<span class="w"> </span>prte-&lt;version&gt;.tar.bz2
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>prte-&lt;version&gt;
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>&lt;path&gt;<span class="w"> </span><span class="p">|&amp;</span><span class="w"> </span>tee<span class="w"> </span>config.out
</pre></div>
</div>
<p>Note that the code block will be rendered at the same level as
where the first <code class="docutils literal notranslate"><span class="pre">.</span></code> of <code class="docutils literal notranslate"><span class="pre">..</span> <span class="pre">code-block::</span></code> starts. In this
case, the example code block will be rendered in the bulleted
item.</p>
</li>
</ul>
</li>
</ul>
<p>Whereas this parargraph and code block will be outside of the
above bulleted list:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>tar<span class="w"> </span>xf<span class="w"> </span>prte-&lt;version&gt;.tar.bz2
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>prte-&lt;version&gt;
shell$<span class="w"> </span>./configure<span class="w"> </span>--prefix<span class="o">=</span>&lt;path&gt;<span class="w"> </span><span class="p">|&amp;</span><span class="w"> </span>tee<span class="w"> </span>config.out
<span class="c1"># Fun note: the code-block can contain blank lines.</span>
</pre></div>
</div>
<p>The code-block is terminated by a blank line and then outdent back
to the same level as the first <code class="docutils literal notranslate"><span class="pre">.</span></code> in <code class="docutils literal notranslate"><span class="pre">..</span> <span class="pre">code-block::</span></code>.</p>
</div>
<div class="section" id="un-numbered-bullets">
<h2><span class="section-number">11.5.7. </span>Un-numbered bullets<a class="headerlink" href="#un-numbered-bullets" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Start lines with <code class="docutils literal notranslate"><span class="pre">*</span></code> or <code class="docutils literal notranslate"><span class="pre">-</span></code></p></li>
<li><p>RST: Start lines with <code class="docutils literal notranslate"><span class="pre">*</span></code>. You can wrap lines at the same
indenting level to make paragraphs in the same bullet.</p>
<p>Having a blank line and then more text at the same indenting level
makes another paragraph in the same bullet. You even put other
directives in this same indenting level.</p>
<ul>
<li><p>For example, you can start a sub bullet.</p>
<p>This text is the next paragraph in the same sub bullet.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>This is a verbatim code block within this same sub bullet.
More about code-blocks below.
</pre></div>
</div>
<p>This is the next paragraph (after the code block) in the same
sub bullet.</p>
</li>
<li><p>If you start a new bullet, that terminates the previous bullet.</p></li>
<li><p>You <strong>MUST</strong> put blank lines between bullets!</p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="numbered-bullets">
<h2><span class="section-number">11.5.8. </span>Numbered bullets:<a class="headerlink" href="#numbered-bullets" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Start lines with <code class="docutils literal notranslate"><span class="pre">#</span></code></p></li>
<li><p>RST: Start lines with <code class="docutils literal notranslate"><span class="pre">#.</span></code></p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Yes, the trailing <code class="docutils literal notranslate"><span class="pre">.</span></code> is important</p>
</div>
<p>For example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="m">#.</span> Item number 1
<span class="m">#.</span> The second item
<span class="m">#.</span> A third item
</pre></div>
</div>
<p>All the same rules for indentation apply as described above.</p>
</li>
</ul>
</div>
<div class="section" id="comments">
<h2><span class="section-number">11.5.9. </span>Comments<a class="headerlink" href="#comments" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: Enclose content in <code class="docutils literal notranslate"><span class="pre">&lt;!--</span></code> and <code class="docutils literal notranslate"><span class="pre">--&gt;</span></code> (i.e., HTML comments,
but they are included in the output)</p></li>
<li><p>RST: Start a line with two periods and a space.</p>
<p>For example, the following block is a comment, and will not be
included in the output:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="cp">.. Hello world. This is a comment. This whole block is a</span>
<span class="cp"> comment. You can leave it here in the final document, and it</span>
<span class="cp"> will not be included in the rendered output.</span>
<span class="cp"> Your comment can even include blank lines. You terminate a</span>
<span class="cp"> comment -- just like most other things in RST -- by a blank</span>
<span class="cp"> line and then outdenting back out to the same column as the</span>
<span class="cp"> first &quot;.&quot;.</span>
This line is no longer part of the comment.
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="including-files">
<h2><span class="section-number">11.5.10. </span>Including files<a class="headerlink" href="#including-files" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: You cannot include files in Markdown.</p></li>
<li><p>RST: Use the <code class="docutils literal notranslate"><span class="pre">..</span> <span class="pre">include::</span> <span class="pre">FILENAME</span></code> directive. For example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">include</span><span class="p">::</span> features-extensions.rst
<span class="p">..</span> <span class="ow">include</span><span class="p">::</span> features-java.rst
</pre></div>
</div>
<p>Those directives include those 2 files right here in this RST file.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Chapter/section/subsection delimiters will be
continued in those files as part of rendering this
file.</p>
</div>
</li>
</ul>
</div>
<div class="section" id="hyperlinks-to-urls">
<h2><span class="section-number">11.5.11. </span>Hyperlinks to URLs<a class="headerlink" href="#hyperlinks-to-urls" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD:</p>
<div class="highlight-md notranslate"><div class="highlight"><pre><span></span>[<span class="nt">this is the link text</span>](<span class="na">https://example.com/</span>)
</pre></div>
</div>
</li>
<li><p>RST:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="s">`this is the link text </span><span class="si">&lt;https://example.com/&gt;</span><span class="s">`_</span>
</pre></div>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Yes, the trailing underscore in RST is important.
It’s a little weird, but you’ll cope.</p>
</div>
</li>
</ul>
</div>
<div class="section" id="hyperlinks-to-anchors">
<h2><span class="section-number">11.5.12. </span>Hyperlinks to anchors<a class="headerlink" href="#hyperlinks-to-anchors" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: I forget offhand how to make anchors and links to them in MD.</p></li>
<li><p>RST: Use the <code class="docutils literal notranslate"><span class="pre">:ref:</span></code> directive.</p>
<p>Make an anchor like this:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="nt">_ANCHOR_NAME:</span>
</pre></div>
</div>
<p>It <em>must</em> start with and underscore and end with a colon.</p>
<p>I’ve typically used anchor names that either begin with <code class="docutils literal notranslate"><span class="pre">label-</span></code>
or end in <code class="docutils literal notranslate"><span class="pre">-label</span></code> to make it blatantly obvious that it’s a
label. For example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="nt">_building-and-installing-section-label:</span>
</pre></div>
</div>
<p>Then you can use the <code class="docutils literal notranslate"><span class="pre">:ref:</span></code> directive:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span>be sure to see :ref:`the VPATH build section
<span class="nt">&lt;building-and-installing-section-label&gt;</span>`.
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="hyperlinks-to-other-rst-pages">
<h2><span class="section-number">11.5.13. </span>Hyperlinks to other (RST) pages<a class="headerlink" href="#hyperlinks-to-other-rst-pages" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD:</p>
<div class="highlight-md notranslate"><div class="highlight"><pre><span></span>[<span class="nt">link text</span>](<span class="na">page_name</span>)
</pre></div>
</div>
</li>
<li><p>RST: Use the <code class="docutils literal notranslate"><span class="pre">:doc:</span></code> directive.</p>
<p>General format:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="na">:doc:</span><span class="nv">`link text &lt;PAGE_PATH&gt;`</span>
</pre></div>
</div>
<p>For example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span>You should read <span class="na">:doc:</span><span class="nv">`the Developer&#39;s Guide &lt;/developers&gt;`</span>.
</pre></div>
</div>
<p>The page path is relative to the <code class="docutils literal notranslate"><span class="pre">docs</span></code> dir in the PRRTE git tree.</p>
</li>
</ul>
</div>
<div class="section" id="macros">
<h2><span class="section-number">11.5.14. </span>Macros<a class="headerlink" href="#macros" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: There are no macros in Markdown.</p></li>
<li><p>RST: We have defined a few PRRTE-specific macros in RST. You can
insert these macros anywhere in RST content text.</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">|ompi_ver|</span></code> is the full PRRTE version number, including
alpha/beta/rc/greek denotation. For example <code class="docutils literal notranslate"><span class="pre">5.0.0rc1</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">|ompi_series|</span></code> is the major/minor PRRTE version, e.g.,
<code class="docutils literal notranslate"><span class="pre">5.0.x</span></code>.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Think twice about hard-coding the PRRTE version
number or series when referring to the current
version or series. It can be appropriate to
hard-code an “x.y.0” version to denote a
generational epoch, but in most other cases, you
probably want to use one of the macros.</p>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">|mdash|</span></code> is a unicode long dash, an “em” dash. Use it instead
of <code class="docutils literal notranslate"><span class="pre">--</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">|rarrow|</span></code> is a unicode right arrow. Use it instead of <code class="docutils literal notranslate"><span class="pre">-&gt;</span></code>
or <code class="docutils literal notranslate"><span class="pre">--&gt;</span></code>.</p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="brightly-colored-boxes">
<h2><span class="section-number">11.5.15. </span>Brightly-colored boxes<a class="headerlink" href="#brightly-colored-boxes" title="Permalink to this heading"></a></h2>
<ul>
<li><p>MD: There are no brightly-colored boxes in MD.</p></li>
<li><p>RST: You can use various directives to make brightly-colored
“note” boxes (Called admonitions) in RST. For example:</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>a green box with a “!” icon</p>
<p>Standard indenting rules apply for the content in the box. You
can have multiple lines and multiple paragraphs, for example.</p>
<p>Yippee.</p>
<ul>
<li><p>You can even have bullets.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>You can even have code blocks inside the bullet inside the
caution box.
</pre></div>
</div>
</li>
<li><p>All the standard indenting rules apply.</p></li>
</ul>
</div>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>a green box with a “!” icon</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>a blue box with a “!” icon</p>
</div>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>an orange box with a “!” icon</p>
</div>
<div class="admonition attention">
<p class="admonition-title">Attention</p>
<p>an orange box with a “!” icon</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>an orange box with a “!” icon</p>
</div>
<div class="admonition error">
<p class="admonition-title">Error</p>
<p>a red box with a “!” icon</p>
</div>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>a red box with a “!” icon</p>
</div>
<div class="tip admonition">
<p class="admonition-title">Custom title</p>
<p>You can name this box whatever you want:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">admonition</span><span class="p">::</span> Custom title
<span class="nc">:class:</span> tip
Content of your box here.
</pre></div>
</div>
<p>Custom text for this custom admonition. Note that the <code class="docutils literal notranslate"><span class="pre">:class:</span> <span class="pre">&lt;type&gt;</span></code>
will change the coloring to the color for the basic admonition of that
type. E.g., <code class="docutils literal notranslate"><span class="pre">:class:</span> <span class="pre">tip</span></code> makes the box be green.</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="sphinx.html" class="btn btn-neutral float-left" title="11.4. Installing and running Sphinx (building the PRRTE docs)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../contributing.html" class="btn btn-neutral float-right" title="12. Contributing to PRRTE" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,372 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.4. Installing and running Sphinx (building the PRRTE docs) &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.5. ReStructured Text for those who know Markdown" href="rst-for-markdown-expats.html" />
<link rel="prev" title="11.3. Manually installing the GNU Autootools" href="gnu-autotools.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Developer’s guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">11.1. Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="git-github.html">11.2. GitHub, Git, and related topics</a></li>
<li class="toctree-l2"><a class="reference internal" href="gnu-autotools.html">11.3. Manually installing the GNU Autootools</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.4. Installing and running Sphinx (building the PRRTE docs)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#installing-python">11.4.1. Installing Python</a></li>
<li class="toctree-l3"><a class="reference internal" href="#installing-sphinx">11.4.2. Installing Sphinx</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#install-sphinx-in-a-python-virtual-environment">11.4.2.1. Install Sphinx in a Python virtual environment</a></li>
<li class="toctree-l4"><a class="reference internal" href="#install-sphinx-globally">11.4.2.2. Install Sphinx globally</a></li>
<li class="toctree-l4"><a class="reference internal" href="#install-sphinx-locally">11.4.2.3. Install Sphinx locally</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#running-sphinx">11.4.3. Running Sphinx</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#sphinx-execution-time">11.4.3.1. Sphinx execution time</a></li>
<li class="toctree-l4"><a class="reference internal" href="#checking-sphinx-html-links">11.4.3.2. Checking Sphinx HTML links</a></li>
<li class="toctree-l4"><a class="reference internal" href="#viewing-docs-locally">11.4.3.3. Viewing docs locally</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="rst-for-markdown-expats.html">11.5. ReStructured Text for those who know Markdown</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Developer’s guide</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.4. </span>Installing and running Sphinx (building the PRRTE docs)</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/developers/sphinx.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="installing-and-running-sphinx-building-the-prrte-docs">
<span id="developers-installing-sphinx-label"></span><h1><span class="section-number">11.4. </span>Installing and running Sphinx (building the PRRTE docs)<a class="headerlink" href="#installing-and-running-sphinx-building-the-prrte-docs" title="Permalink to this heading"></a></h1>
<p>As with all content in the Developer’s Guide, this section is only
relevant for developers who work in the PRRTE code base itself.
End users who install a binary PRRTE package or build from an
official PRRTE distribution tarball do not need to have Sphinx
installed.</p>
<div class="section" id="installing-python">
<h2><span class="section-number">11.4.1. </span>Installing Python<a class="headerlink" href="#installing-python" title="Permalink to this heading"></a></h2>
<p>The <a class="reference external" href="https://www.sphinx-doc.org/">Sphinx tool</a> is written in Python,
and therefore needs to have Python available. As of late 2022, Sphinx
requires Python &gt;= v3.7.</p>
<p>This documentation does not contain detailed instructions for
installing a Python version sufficient for using Sphinx. Consult your
local OS documentation for how to obtain Python &gt;= v3.7, or search the
internet for further information.</p>
</div>
<div class="section" id="installing-sphinx">
<h2><span class="section-number">11.4.2. </span>Installing Sphinx<a class="headerlink" href="#installing-sphinx" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/installation.html">The Sphinx documentation</a>
recommends installing Sphinx (and its required Python dependencies)
via <code class="docutils literal notranslate"><span class="pre">pip</span></code>, which typically requires connectivity to the general
internet.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you are running on MacOS, you may be tempted to use
Homebrew or MacPorts to install Sphinx. The Sphinx documentation
recommends <strong>against</strong> this. Instead, you should use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to
install Sphinx.</p>
</div>
<p>There are three general ways to install Sphinx; you only need one of
them.</p>
<div class="section" id="install-sphinx-in-a-python-virtual-environment">
<h3><span class="section-number">11.4.2.1. </span>Install Sphinx in a Python virtual environment<a class="headerlink" href="#install-sphinx-in-a-python-virtual-environment" title="Permalink to this heading"></a></h3>
<p>The preferred method of installing Sphinx for PRRTE documentation
development is to install Sphinx in a Python virtual environment.
This places Sphinx in a sandbox that will not conflict with other
<code class="docutils literal notranslate"><span class="pre">pip</span></code>-installed Python modules. This example installs Sphinx and
other Python modules in the <code class="docutils literal notranslate"><span class="pre">ompi-docs-venv</span></code> tree under your PRRTE
Git clone directory:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create the Python virtual environment</span>
shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>TOP_OF_PRRTE_GIT_CLONE
shell$<span class="w"> </span>python3<span class="w"> </span>-m<span class="w"> </span>venv<span class="w"> </span>ompi-docs-venv
<span class="c1"># Or: python3 -m virtualenv ompi-docs-venv</span>
<span class="c1"># Or: virtualenv --python=python3 ompi-docs-venv</span>
<span class="c1"># Activate the virtual environment</span>
shell$<span class="w"> </span>.<span class="w"> </span>./ompi-docs-venv/bin/activate
<span class="c1"># Notice that the shell prompt changes</span>
<span class="c1"># Now install the required Python modules</span>
<span class="o">(</span>ompi-docs-venv<span class="o">)</span><span class="w"> </span>shell$<span class="w"> </span>pip3<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>docs/requirements.txt
<span class="c1"># Or: python3 -m pip install install -r docs/requirements.txt</span>
</pre></div>
</div>
<p>Note that sourcing the <code class="docutils literal notranslate"><span class="pre">activate</span></code> script will change your prompt to
put the name of your virtual environment directory at the front, just
as a visual reminder that you are operating in a Python virtual
environment. You can run <code class="docutils literal notranslate"><span class="pre">deactivate</span></code> to leave the virtual
environment.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You will need to source the <code class="docutils literal notranslate"><span class="pre">activate</span></code> script to put
Sphinx in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code> <em>before</em> running <code class="docutils literal notranslate"><span class="pre">configure</span></code>.</p>
</div>
</div>
<div class="section" id="install-sphinx-globally">
<h3><span class="section-number">11.4.2.2. </span>Install Sphinx globally<a class="headerlink" href="#install-sphinx-globally" title="Permalink to this heading"></a></h3>
<p>If Python virtual environments are not desirable on your system, you
can install Sphinx globally on your system (you may need to run with
root privileges):</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>TOP_OF_PRRTE_GIT_CLONE
shell$<span class="w"> </span>pip3<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>docs/requirements.txt
<span class="c1"># Or: python3 -m pip install install -r docs/requirements.txt</span>
</pre></div>
</div>
<p>This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.</p>
<p>This will likely install the <code class="docutils literal notranslate"><span class="pre">sphinx-build</span></code> executable in a location
that is already in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>. If the location is not already in
your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>, then you need to add it to your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You will need to ensure that Sphinx is in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>
<em>before</em> running <code class="docutils literal notranslate"><span class="pre">configure</span></code>.</p>
</div>
</div>
<div class="section" id="install-sphinx-locally">
<h3><span class="section-number">11.4.2.3. </span>Install Sphinx locally<a class="headerlink" href="#install-sphinx-locally" title="Permalink to this heading"></a></h3>
<p>If you cannot or do not want to install Sphinx globally on your
system, the following will install Sphinx somewhere under your
<code class="docutils literal notranslate"><span class="pre">$HOME</span></code>. It is the same <code class="docutils literal notranslate"><span class="pre">pip</span></code> command as shown above, but with
the addition of the <code class="docutils literal notranslate"><span class="pre">--user</span></code> flag (you should not need <code class="docutils literal notranslate"><span class="pre">root</span></code>
permissions to run this command):</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>TOP_OF_PRRTE_GIT_CLONE
shell$<span class="w"> </span>pip3<span class="w"> </span>install<span class="w"> </span>--user<span class="w"> </span>-r<span class="w"> </span>docs/requirements.txt
<span class="c1"># Or: python3 -m pip install install -r docs/requirements.txt</span>
</pre></div>
</div>
<p>This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.</p>
<p>You will likely need to find the location where <code class="docutils literal notranslate"><span class="pre">sphinx-build</span></code> was
installed and add it to your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>On MacOS, look for <code class="docutils literal notranslate"><span class="pre">sphinx-build</span></code> under
<code class="docutils literal notranslate"><span class="pre">$HOME/Library/Python/VERSION/bin</span></code> (where <code class="docutils literal notranslate"><span class="pre">VERSION</span></code> is
the version number of Python). Or it may have installed to
<code class="docutils literal notranslate"><span class="pre">/usr/local/bin/sphinx-build</span></code>. YMMV.</p>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You will need to ensure that Sphinx is in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>
<em>before</em> running <code class="docutils literal notranslate"><span class="pre">configure</span></code>.</p>
</div>
</div>
</div>
<div class="section" id="running-sphinx">
<h2><span class="section-number">11.4.3. </span>Running Sphinx<a class="headerlink" href="#running-sphinx" title="Permalink to this heading"></a></h2>
<p>PRRTE’s build environment is setup to invoke Sphinx automatically;
you should not need to invoke Sphinx manually.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You will need to ensure that Sphinx is in your <code class="docutils literal notranslate"><span class="pre">PATH</span></code>
<em>before</em> running <code class="docutils literal notranslate"><span class="pre">configure</span></code>.</p>
</div>
<p>As long as <code class="docutils literal notranslate"><span class="pre">configure</span></code> found Sphinx, <code class="docutils literal notranslate"><span class="pre">make</span></code> will invoke Sphinx to
build the documentation. You can also run <code class="docutils literal notranslate"><span class="pre">make</span></code> directly in the
<code class="docutils literal notranslate"><span class="pre">docs/</span></code> directory to build <em>just</em> the docs and skip building the
rest of the PRRTE software. This can be a huge time-saver when
iteratively writing, rendering, and viewing/proofing documentation.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The fully-built HTML and man page docs are included in
official PRRTE distribution tarballs. Meaning: if you
download an official distribution PRRTE tarball,
the pre-built HTML and man page files are included
in the tarball.</p>
<p>Sphinx is a requirement for <em>developers</em> who want to build
the PRRTE docs. End users do <em>not</em> need to have Sphinx
available to build PRRTE or have its docs installed from
an official distribution tarball.</p>
</div>
<div class="section" id="sphinx-execution-time">
<h3><span class="section-number">11.4.3.1. </span>Sphinx execution time<a class="headerlink" href="#sphinx-execution-time" title="Permalink to this heading"></a></h3>
<p>Sphinx is stateful: subsequent runs can be significantly faster
because Sphinx will only re-render HTML files that have changes. This
is a nice time saver for PRRTE (e.g., if you are iterating over
writing the docs and running <code class="docutils literal notranslate"><span class="pre">make</span></code> to see how they rendered in
HTML).</p>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>Sphinx is only <em>somewhat</em> smart in its partial
re-rendering. If you change a title in an RST file, for
example, Sphinx will (by default) only re-render <em>that</em>
page. The Tables of Contents / left hand navigation on
other pages may not be updated.</p>
<p>You can always force a full re-render via:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>docs
shell$<span class="w"> </span>rm<span class="w"> </span>-rf<span class="w"> </span>_build
shell$<span class="w"> </span>make
</pre></div>
</div>
</div>
</div>
<div class="section" id="checking-sphinx-html-links">
<h3><span class="section-number">11.4.3.2. </span>Checking Sphinx HTML links<a class="headerlink" href="#checking-sphinx-html-links" title="Permalink to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">linkcheck</span></code> will invoke Sphinx’s functionality to check all the
external links in the documentation:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>docs
shell$<span class="w"> </span>make<span class="w"> </span>linkcheck
</pre></div>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>You will need to be on a computer that has good access
to the internet when running this command.</p>
</div>
</div>
<div class="section" id="viewing-docs-locally">
<h3><span class="section-number">11.4.3.3. </span>Viewing docs locally<a class="headerlink" href="#viewing-docs-locally" title="Permalink to this heading"></a></h3>
<p>Once you have built the docs in your local Git clone, you can view
them locally in the build tree:</p>
<ol class="arabic">
<li><p>Open <code class="docutils literal notranslate"><span class="pre">docs/_build/html/index.html</span></code> in a browser to view the HTML
docs. For example, on MacOS, the following command opens the build
tree docs in the default web browser:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>open<span class="w"> </span>docs/_build/html/index.html
</pre></div>
</div>
</li>
<li><p>Use the <code class="docutils literal notranslate"><span class="pre">man</span></code> command to view the Nroff files in
<code class="docutils literal notranslate"><span class="pre">docs/_build/man</span></code> (you may need to use an absolute or relative
filename to prevent <code class="docutils literal notranslate"><span class="pre">man</span></code> from using its search paths). For
example:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>docs/_build/man
shell$<span class="w"> </span>man<span class="w"> </span>./prterun.1
</pre></div>
</div>
</li>
</ol>
<p>Alternatively, you can view these files in their installed locations
after running <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">install</span></code>:</p>
<ol class="arabic">
<li><p>The HTML docs are installed (by default) to
<code class="docutils literal notranslate"><span class="pre">$prefix/share/doc/prte/html</span></code>. You can use a web browser to
open the <code class="docutils literal notranslate"><span class="pre">index.html</span></code> in that directory to view the docs locally.
For example, on MacOS, the following command opens the installed
docs in the default web browser:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>open<span class="w"> </span><span class="nv">$prefix</span>/share/doc/prte/html/index.html
</pre></div>
</div>
</li>
<li><p>The man pages are installed (by default) to <code class="docutils literal notranslate"><span class="pre">$preix/share/man</span></code>.
If your man page search path includes this location, you can invoke
commands similar to the following to see the same content that you
see in these HTML pages:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>man<span class="w"> </span>prterun
</pre></div>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="gnu-autotools.html" class="btn btn-neutral float-left" title="11.3. Manually installing the GNU Autootools" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="rst-for-markdown-expats.html" class="btn btn-neutral float-right" title="11.5. ReStructured Text for those who know Markdown" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,122 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Index</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,131 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. Getting help &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="4. Installing PRRTE" href="install.html" />
<link rel="prev" title="2. Release Notes" href="release-notes.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="hosts/index.html">7. Host specification</a></li>
<li class="toctree-l1"><a class="reference internal" href="placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">3. </span>Getting help</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/getting-help.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="getting-help">
<h1><span class="section-number">3. </span>Getting help<a class="headerlink" href="#getting-help" title="Permalink to this heading"></a></h1>
<p>The best way to report bugs, send comments, or ask questions is to
post them on the <a class="reference external" href="https://github.com/openpmix/prrte/issues">PRRTE GitHub issue tracker</a>.</p>
<p>When submitting questions and problems, be sure to include as much
extra information as possible.</p>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="release-notes.html" class="btn btn-neutral float-left" title="2. Release Notes" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="install.html" class="btn btn-neutral float-right" title="4. Installing PRRTE" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>7.3. Listing Hosts on the Command Line &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="7.4. Relative host indexing" href="relative-indexing.html" />
<link rel="prev" title="7.2. Hostfiles" href="hostfiles.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">7. Host specification</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="rm.html">7.1. Resource Manager-Provided Hosts</a></li>
<li class="toctree-l2"><a class="reference internal" href="hostfiles.html">7.2. Hostfiles</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">7.3. Listing Hosts on the Command Line</a></li>
<li class="toctree-l2"><a class="reference internal" href="relative-indexing.html">7.4. Relative host indexing</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">7. </span>Host specification</a></li>
<li class="breadcrumb-item active"><span class="section-number">7.3. </span>Listing Hosts on the Command Line</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/hosts/cli.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="listing-hosts-on-the-command-line">
<h1><span class="section-number">7.3. </span>Listing Hosts on the Command Line<a class="headerlink" href="#listing-hosts-on-the-command-line" title="Permalink to this heading"></a></h1>
<p>Many PRRTE commands accept the <code class="docutils literal notranslate"><span class="pre">--host</span></code> CLI parameter.
<code class="docutils literal notranslate"><span class="pre">--host</span></code> accepts a comma-delimited list of tokens of the form:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">host</span><span class="p">[:</span><span class="n">slots</span><span class="p">]</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">host</span></code> token can be either:</p>
<ul class="simple">
<li><p>A name that resolves to an IP address, or</p></li>
<li><p>An IP address</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The names and/or IP addresses of hosts are <em>only</em> used for
identifying the target host on which to launch. They are
<em>not</em> used for determining which network interfaces are used
by applications (e.g., MPI or other network-based
applications).</p>
<p>For network-based applications, consult their documentation
for how to specify which network interfaces are used.</p>
</div>
<p>The optional integer <code class="docutils literal notranslate"><span class="pre">:slots</span></code> parameter tells PRRTE the maximum
number of slots to use on that host (see this section on definition
of the term <code class="docutils literal notranslate"><span class="pre">slot</span></code> for a description of what a “slot” is).</p>
<p>For example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">prterun</span> <span class="o">--</span><span class="n">host</span> <span class="n">node1</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span><span class="n">node2</span><span class="p">,</span><span class="n">node3</span><span class="p">:</span><span class="mi">5</span> <span class="o">...</span>
</pre></div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="hostfiles.html" class="btn btn-neutral float-left" title="7.2. Hostfiles" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="relative-indexing.html" class="btn btn-neutral float-right" title="7.4. Relative host indexing" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,166 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>7.2. Hostfiles &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="7.3. Listing Hosts on the Command Line" href="cli.html" />
<link rel="prev" title="7.1. Resource Manager-Provided Hosts" href="rm.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">7. Host specification</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="rm.html">7.1. Resource Manager-Provided Hosts</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">7.2. Hostfiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="cli.html">7.3. Listing Hosts on the Command Line</a></li>
<li class="toctree-l2"><a class="reference internal" href="relative-indexing.html">7.4. Relative host indexing</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">7. </span>Host specification</a></li>
<li class="breadcrumb-item active"><span class="section-number">7.2. </span>Hostfiles</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/hosts/hostfiles.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="hostfiles">
<h1><span class="section-number">7.2. </span>Hostfiles<a class="headerlink" href="#hostfiles" title="Permalink to this heading"></a></h1>
<p>Hostfiles (sometimes called “machine files”) are a combination of two
things:</p>
<ol class="arabic simple">
<li><p>A listing of hosts on which to launch processes.</p></li>
<li><p>Optionally, limit the number of processes which can be launched on
each host.</p></li>
</ol>
<p>Hostfile syntax consists of one node name on each line, optionally
including a designated number of “slots”:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is a comment line, and will be ignored</span>
node01<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">10</span>
node13<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">5</span>
node15
node16
node17<span class="w"> </span><span class="nv">slots</span><span class="o">=</span><span class="m">3</span>
...
</pre></div>
</div>
<p>Blank lines and lines beginning with a <code class="docutils literal notranslate"><span class="pre">#</span></code> are ignored.</p>
<p>A “slot” is the PRRTE term for an allocatable unit where we can launch
a process. See the section on definition of the term <code class="docutils literal notranslate"><span class="pre">slot</span></code> for a
longer description of slots.</p>
<p>In the absence of the <code class="docutils literal notranslate"><span class="pre">slot</span></code> parameter, PRRTE will assign either the
number of slots to be the number of CPUs detected on the node or the
resource manager-assigned value if operating in the presence of an
RM.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>If using a resource manager, the user-specified number
of slots is capped by the RM-assigned value.</p>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="rm.html" class="btn btn-neutral float-left" title="7.1. Resource Manager-Provided Hosts" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="cli.html" class="btn btn-neutral float-right" title="7.3. Listing Hosts on the Command Line" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>7. Host specification &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="7.1. Resource Manager-Provided Hosts" href="rm.html" />
<link rel="prev" title="6.1. Session Directories" href="../how-things-work/session_dirs.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">7. Host specification</a><ul>
<li class="toctree-l2"><a class="reference internal" href="rm.html">7.1. Resource Manager-Provided Hosts</a></li>
<li class="toctree-l2"><a class="reference internal" href="hostfiles.html">7.2. Hostfiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="cli.html">7.3. Listing Hosts on the Command Line</a></li>
<li class="toctree-l2"><a class="reference internal" href="relative-indexing.html">7.4. Relative host indexing</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">7. </span>Host specification</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/hosts/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="host-specification">
<h1><span class="section-number">7. </span>Host specification<a class="headerlink" href="#host-specification" title="Permalink to this heading"></a></h1>
<p>PRRTE identifies hosts on which to launch processes by:</p>
<ol class="arabic simple">
<li><p>A Resource Manager (RM) telling PRRTE which hosts to use</p></li>
<li><p>The user providing a hostfile (also sometimes called a “machine
file”)</p></li>
<li><p>The user providing a list of hosts on the command line</p></li>
</ol>
<p>The sections below describe each of these in more detail.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="rm.html">7.1. Resource Manager-Provided Hosts</a></li>
<li class="toctree-l1"><a class="reference internal" href="hostfiles.html">7.2. Hostfiles</a></li>
<li class="toctree-l1"><a class="reference internal" href="cli.html">7.3. Listing Hosts on the Command Line</a></li>
<li class="toctree-l1"><a class="reference internal" href="relative-indexing.html">7.4. Relative host indexing</a></li>
</ul>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../how-things-work/session_dirs.html" class="btn btn-neutral float-left" title="6.1. Session Directories" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="rm.html" class="btn btn-neutral float-right" title="7.1. Resource Manager-Provided Hosts" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,229 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>7.4. Relative host indexing &mdash; PMIx Reference Run Time Environment 3.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="8. Process placement" href="../placement/index.html" />
<link rel="prev" title="7.3. Listing Hosts on the Command Line" href="cli.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
PMIx Reference Run Time Environment
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">2. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">3. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../install.html">4. Installing PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">5. PRRTE DVM Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">7. Host specification</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="rm.html">7.1. Resource Manager-Provided Hosts</a></li>
<li class="toctree-l2"><a class="reference internal" href="hostfiles.html">7.2. Hostfiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="cli.html">7.3. Listing Hosts on the Command Line</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">7.4. Relative host indexing</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../placement/index.html">8. Process placement</a></li>
<li class="toctree-l1"><a class="reference internal" href="../notifications.html">9. Notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../session-directory.html">10. Session directory</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">11. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">12. Contributing to PRRTE</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">13. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">14. PRRTE manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">15. Software Version Numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">PMIx Reference Run Time Environment</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">7. </span>Host specification</a></li>
<li class="breadcrumb-item active"><span class="section-number">7.4. </span>Relative host indexing</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/hosts/relative-indexing.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="relative-host-indexing">
<h1><span class="section-number">7.4. </span>Relative host indexing<a class="headerlink" href="#relative-host-indexing" title="Permalink to this heading"></a></h1>
<p>Hostfile and <code class="docutils literal notranslate"><span class="pre">--host</span></code> specifications can also be made using relative
indexing. This allows a user to stipulate which hosts are to be used
for a given app context without specifying the particular host name,
but rather its relative position in the allocation.</p>
<p>This can probably best be understood through consideration of a few
examples. Consider the case where a DVM is comprised of a set of nodes
named <code class="docutils literal notranslate"><span class="pre">foo1</span></code>, <code class="docutils literal notranslate"><span class="pre">foo2</span></code>, <code class="docutils literal notranslate"><span class="pre">foo3</span></code>, <code class="docutils literal notranslate"><span class="pre">foo4</span></code>. The user wants the first
app context to have exclusive use of the first two nodes, and a second
app context to use the last two nodes. Of course, the user could
printout the allocation to find the names of the nodes allocated to
them and then use <code class="docutils literal notranslate"><span class="pre">--host</span></code> to specify this layout, but this is
cumbersome and would require hand-manipulation for every invocation.</p>
<p>A simpler method is to utilize PRRTE’s relative indexing capability to
specify the desired layout. In this case, a command line containing:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">--</span><span class="n">host</span> <span class="o">+</span><span class="n">n1</span><span class="p">,</span><span class="o">+</span><span class="n">n2</span> <span class="o">./</span><span class="n">app1</span> <span class="p">:</span> <span class="o">--</span><span class="n">host</span> <span class="o">+</span><span class="n">n3</span><span class="p">,</span><span class="o">+</span><span class="n">n4</span> <span class="o">./</span><span class="n">app2</span>
</pre></div>
</div>
<p>would provide the desired pattern. The <code class="docutils literal notranslate"><span class="pre">+</span></code> syntax indicates that the
information is being provided as a relative index into the existing
allocation. Two methods of relative indexing are supported:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">+n#</span></code>: A relative index into the allocation referencing the <code class="docutils literal notranslate"><span class="pre">#</span></code>
node. PRRTE will substitute the <code class="docutils literal notranslate"><span class="pre">#</span></code> node in the allocation</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">+e[:#]</span></code>: A request for <code class="docutils literal notranslate"><span class="pre">#</span></code> empty nodes — i.e., PRRTE is
to substitute this reference with nodes that have not yet been used
by any other app_context. If the <code class="docutils literal notranslate"><span class="pre">:#</span></code> is not provided, PRRTE will
substitute the reference with all empty nodes. Note that PRRTE does
track the empty nodes that have been assigned in this manner, so
multiple uses of this option will result in assignment of unique
nodes up to the limit of the available empty nodes. Requests for
more empty nodes than are available will generate an error.</p></li>
</ul>
<p>Relative indexing can be combined with absolute naming of hosts in any
arbitrary manner, and can be used in hostfiles as well as with the
<code class="docutils literal notranslate"><span class="pre">--host</span></code> command line option. In addition, any slot specification
provided in hostfiles will be respected — thus, a user can
specify that only a certain number of slots from a relative indexed
host are to be used for a given app context.</p>
<p>Another example may help illustrate this point. Consider the case
where the user has a hostfile containing:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dummy1</span> <span class="n">slots</span><span class="o">=</span><span class="mi">4</span>
<span class="n">dummy2</span> <span class="n">slots</span><span class="o">=</span><span class="mi">4</span>
<span class="n">dummy3</span> <span class="n">slots</span><span class="o">=</span><span class="mi">4</span>
<span class="n">dummy4</span> <span class="n">slots</span><span class="o">=</span><span class="mi">4</span>
<span class="n">dummy5</span> <span class="n">slots</span><span class="o">=</span><span class="mi">4</span>
</pre></div>
</div>
<p>This may, for example, be a hostfile that describes a set of
commonly-used resources that the user wishes to execute applications
against. For this particular application, the user plans to map
byslot, and wants the first two ranks to be on the second node of any
allocation, the next ranks to land on an empty node, have one rank
specifically on <code class="docutils literal notranslate"><span class="pre">dummy4</span></code>, the next rank to be on the second node of the
allocation again, and finally any remaining ranks to be on whatever
empty nodes are left. To accomplish this, the user provides a hostfile
of:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">+</span><span class="n">n2</span> <span class="n">slots</span><span class="o">=</span><span class="mi">2</span>
<span class="o">+</span><span class="n">e</span><span class="p">:</span><span class="mi">1</span>
<span class="n">dummy4</span> <span class="n">slots</span><span class="o">=</span><span class="mi">1</span>
<span class="o">+</span><span class="n">n2</span>
<span class="o">+</span><span class="n">e</span>
</pre></div>
</div>
<p>The user can now use this information in combination with PRRTE’s
sequential mapper to obtain their specific layout:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">launcher</span><span class="o">&gt;</span> <span class="o">--</span><span class="n">hostfile</span> <span class="n">dummyhosts</span> <span class="o">--</span><span class="n">hostfile</span> <span class="n">mylayout</span> <span class="o">--</span><span class="n">prtemca</span> <span class="n">rmaps</span> <span class="n">seq</span> <span class="o">./</span><span class="n">my_app</span>
</pre></div>
</div>
<p>which will result in:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">rank0</span> <span class="n">being</span> <span class="n">mapped</span> <span class="n">to</span> <span class="n">dummy3</span>
<span class="n">rank1</span> <span class="n">to</span> <span class="n">dummy1</span> <span class="k">as</span> <span class="n">the</span> <span class="n">first</span> <span class="n">empty</span> <span class="n">node</span>
<span class="n">rank2</span> <span class="n">to</span> <span class="n">dummy4</span>
<span class="n">rank3</span> <span class="n">to</span> <span class="n">dummy3</span>
<span class="n">rank4</span> <span class="n">to</span> <span class="n">dummy2</span> <span class="ow">and</span> <span class="n">rank5</span> <span class="n">to</span> <span class="n">dummy5</span> <span class="k">as</span> <span class="n">the</span> <span class="n">last</span> <span class="n">remaining</span> <span class="n">unused</span> <span class="n">nodes</span>
</pre></div>
</div>
<p>Note that the sequential mapper ignores the number of slots arguments
as it only maps one rank at a time to each node in the list.</p>
<p>If the default round-robin mapper had been used, then the mapping
would have resulted in:</p>
<ul class="simple">
<li><p>ranks 0 and 1 being mapped to dummy3 since two slots were specified</p></li>
<li><p>ranks 2-5 on dummy1 as the first empty node, which has four slots</p></li>
<li><p>rank6 on dummy4 since the hostfile specifies only a single slot from
that node is to be used</p></li>
<li><p>ranks 7 and 8 on dummy3 since only two slots remain available</p></li>
<li><p>ranks 9-12 on dummy2 since it is the next available empty node and
has four slots</p></li>
<li><p>ranks 13-16 on dummy5 since it is the last remaining unused node and
has four slots</p></li>
</ul>
<p>Thus, the use of relative indexing can allow for complex mappings to
be ported across allocations, including those obtained from automated
resource managers, without the need for manual manipulation of scripts
and/or command lines.</p>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="cli.html" class="btn btn-neutral float-left" title="7.3. Listing Hosts on the Command Line" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../placement/index.html" class="btn btn-neutral float-right" title="8. Process placement" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2003-2025, The PRRTE Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More