17db96d56Sopenharmony_ci.. _api-reference:
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci*************
47db96d56Sopenharmony_ciAPI Reference
57db96d56Sopenharmony_ci*************
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. seealso::
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci   `New and changed setup.py arguments in setuptools`_
107db96d56Sopenharmony_ci      The ``setuptools`` project adds new capabilities to the ``setup`` function
117db96d56Sopenharmony_ci      and other APIs, makes the API consistent across different Python versions,
127db96d56Sopenharmony_ci      and is hence recommended over using ``distutils`` directly.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. _New and changed setup.py arguments in setuptools: https://web.archive.org/web/20210614192516/https://setuptools.pypa.io/en/stable/userguide/keywords.html
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. include:: ./_setuptools_disclaimer.rst
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci:mod:`distutils.core` --- Core Distutils functionality
197db96d56Sopenharmony_ci======================================================
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci.. module:: distutils.core
227db96d56Sopenharmony_ci   :synopsis: The core Distutils functionality
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciThe :mod:`distutils.core` module is the only module that needs to be installed
267db96d56Sopenharmony_cito use the Distutils. It provides the :func:`setup` (which is called from the
277db96d56Sopenharmony_cisetup script). Indirectly provides the  :class:`distutils.dist.Distribution` and
287db96d56Sopenharmony_ci:class:`distutils.cmd.Command` class.
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci.. function:: setup(arguments)
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   The basic do-everything function that does most everything you could ever ask
347db96d56Sopenharmony_ci   for from a Distutils method.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   The setup function takes a large number of arguments. These are laid out in the
377db96d56Sopenharmony_ci   following table.
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|L|
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
427db96d56Sopenharmony_ci   | argument name      | value                          | type                                                        |
437db96d56Sopenharmony_ci   +====================+================================+=============================================================+
447db96d56Sopenharmony_ci   | *name*             | The name of the package        | a string                                                    |
457db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
467db96d56Sopenharmony_ci   | *version*          | The version number of the      | a string                                                    |
477db96d56Sopenharmony_ci   |                    | package; see                   |                                                             |
487db96d56Sopenharmony_ci   |                    | :mod:`distutils.version`       |                                                             |
497db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
507db96d56Sopenharmony_ci   | *description*      | A single line describing the   | a string                                                    |
517db96d56Sopenharmony_ci   |                    | package                        |                                                             |
527db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
537db96d56Sopenharmony_ci   | *long_description* | Longer description of the      | a string                                                    |
547db96d56Sopenharmony_ci   |                    | package                        |                                                             |
557db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
567db96d56Sopenharmony_ci   | *author*           | The name of the package author | a string                                                    |
577db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
587db96d56Sopenharmony_ci   | *author_email*     | The email address of the       | a string                                                    |
597db96d56Sopenharmony_ci   |                    | package author                 |                                                             |
607db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
617db96d56Sopenharmony_ci   | *maintainer*       | The name of the current        | a string                                                    |
627db96d56Sopenharmony_ci   |                    | maintainer, if different from  |                                                             |
637db96d56Sopenharmony_ci   |                    | the author. Note that if       |                                                             |
647db96d56Sopenharmony_ci   |                    | the maintainer is provided,    |                                                             |
657db96d56Sopenharmony_ci   |                    | distutils will use it as the   |                                                             |
667db96d56Sopenharmony_ci   |                    | author in :file:`PKG-INFO`     |                                                             |
677db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
687db96d56Sopenharmony_ci   | *maintainer_email* | The email address of the       | a string                                                    |
697db96d56Sopenharmony_ci   |                    | current maintainer, if         |                                                             |
707db96d56Sopenharmony_ci   |                    | different from the author      |                                                             |
717db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
727db96d56Sopenharmony_ci   | *url*              | A URL for the package          | a string                                                    |
737db96d56Sopenharmony_ci   |                    | (homepage)                     |                                                             |
747db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
757db96d56Sopenharmony_ci   | *download_url*     | A URL to download the package  | a string                                                    |
767db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
777db96d56Sopenharmony_ci   | *packages*         | A list of Python packages that | a list of strings                                           |
787db96d56Sopenharmony_ci   |                    | distutils will manipulate      |                                                             |
797db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
807db96d56Sopenharmony_ci   | *py_modules*       | A list of Python modules that  | a list of strings                                           |
817db96d56Sopenharmony_ci   |                    | distutils will manipulate      |                                                             |
827db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
837db96d56Sopenharmony_ci   | *scripts*          | A list of standalone script    | a list of strings                                           |
847db96d56Sopenharmony_ci   |                    | files to be built and          |                                                             |
857db96d56Sopenharmony_ci   |                    | installed                      |                                                             |
867db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
877db96d56Sopenharmony_ci   | *ext_modules*      | A list of Python extensions to | a list of instances of                                      |
887db96d56Sopenharmony_ci   |                    | be built                       | :class:`distutils.core.Extension`                           |
897db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
907db96d56Sopenharmony_ci   | *classifiers*      | A list of categories for the   | a list of strings; valid classifiers are listed on `PyPI    |
917db96d56Sopenharmony_ci   |                    | package                        | <https://pypi.org/classifiers>`_.                           |
927db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
937db96d56Sopenharmony_ci   | *distclass*        | the :class:`Distribution`      | a subclass of                                               |
947db96d56Sopenharmony_ci   |                    | class to use                   | :class:`distutils.core.Distribution`                        |
957db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
967db96d56Sopenharmony_ci   | *script_name*      | The name of the setup.py       | a string                                                    |
977db96d56Sopenharmony_ci   |                    | script - defaults to           |                                                             |
987db96d56Sopenharmony_ci   |                    | ``sys.argv[0]``                |                                                             |
997db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1007db96d56Sopenharmony_ci   | *script_args*      | Arguments to supply to the     | a list of strings                                           |
1017db96d56Sopenharmony_ci   |                    | setup script                   |                                                             |
1027db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1037db96d56Sopenharmony_ci   | *options*          | default options for the setup  | a dictionary                                                |
1047db96d56Sopenharmony_ci   |                    | script                         |                                                             |
1057db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1067db96d56Sopenharmony_ci   | *license*          | The license for the package    | a string                                                    |
1077db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1087db96d56Sopenharmony_ci   | *keywords*         | Descriptive meta-data, see     | a list of strings or a comma-separated string               |
1097db96d56Sopenharmony_ci   |                    | :pep:`314`                     |                                                             |
1107db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1117db96d56Sopenharmony_ci   | *platforms*        |                                | a list of strings or a comma-separated string               |
1127db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1137db96d56Sopenharmony_ci   | *cmdclass*         | A mapping of command names to  | a dictionary                                                |
1147db96d56Sopenharmony_ci   |                    | :class:`Command` subclasses    |                                                             |
1157db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1167db96d56Sopenharmony_ci   | *data_files*       | A list of data files to        | a list                                                      |
1177db96d56Sopenharmony_ci   |                    | install                        |                                                             |
1187db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1197db96d56Sopenharmony_ci   | *package_dir*      | A mapping of package to        | a dictionary                                                |
1207db96d56Sopenharmony_ci   |                    | directory names                |                                                             |
1217db96d56Sopenharmony_ci   +--------------------+--------------------------------+-------------------------------------------------------------+
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci.. function:: run_setup(script_name[, script_args=None, stop_after='run'])
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   Run a setup script in a somewhat controlled environment, and return  the
1287db96d56Sopenharmony_ci   :class:`distutils.dist.Distribution` instance that drives things.   This is
1297db96d56Sopenharmony_ci   useful if you need to find out the distribution meta-data  (passed as keyword
1307db96d56Sopenharmony_ci   args from *script* to :func:`setup`), or  the contents of the config files or
1317db96d56Sopenharmony_ci   command-line.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci   *script_name* is a file that will be read and run with :func:`exec`.  ``sys.argv[0]``
1347db96d56Sopenharmony_ci   will be replaced with *script* for the duration of the call.  *script_args* is a
1357db96d56Sopenharmony_ci   list of strings; if supplied, ``sys.argv[1:]`` will be replaced by *script_args*
1367db96d56Sopenharmony_ci   for the duration  of the call.
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   *stop_after* tells :func:`setup` when to stop processing; possible  values:
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   +---------------+---------------------------------------------+
1437db96d56Sopenharmony_ci   | value         | description                                 |
1447db96d56Sopenharmony_ci   +===============+=============================================+
1457db96d56Sopenharmony_ci   | *init*        | Stop after the :class:`Distribution`        |
1467db96d56Sopenharmony_ci   |               | instance has been created  and populated    |
1477db96d56Sopenharmony_ci   |               | with the keyword arguments to :func:`setup` |
1487db96d56Sopenharmony_ci   +---------------+---------------------------------------------+
1497db96d56Sopenharmony_ci   | *config*      | Stop after config files have been parsed    |
1507db96d56Sopenharmony_ci   |               | (and their data stored in the               |
1517db96d56Sopenharmony_ci   |               | :class:`Distribution` instance)             |
1527db96d56Sopenharmony_ci   +---------------+---------------------------------------------+
1537db96d56Sopenharmony_ci   | *commandline* | Stop after the command-line                 |
1547db96d56Sopenharmony_ci   |               | (``sys.argv[1:]`` or  *script_args*) have   |
1557db96d56Sopenharmony_ci   |               | been parsed (and the data stored in the     |
1567db96d56Sopenharmony_ci   |               | :class:`Distribution` instance.)            |
1577db96d56Sopenharmony_ci   +---------------+---------------------------------------------+
1587db96d56Sopenharmony_ci   | *run*         | Stop after all commands have been run (the  |
1597db96d56Sopenharmony_ci   |               | same as  if :func:`setup` had been called   |
1607db96d56Sopenharmony_ci   |               | in the usual way). This is the default      |
1617db96d56Sopenharmony_ci   |               | value.                                      |
1627db96d56Sopenharmony_ci   +---------------+---------------------------------------------+
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ciIn addition, the :mod:`distutils.core` module exposed a number of  classes that
1657db96d56Sopenharmony_cilive elsewhere.
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci* :class:`~distutils.extension.Extension` from :mod:`distutils.extension`
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci* :class:`~distutils.cmd.Command` from :mod:`distutils.cmd`
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci* :class:`~distutils.dist.Distribution` from :mod:`distutils.dist`
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ciA short description of each of these follows, but see the relevant module for
1747db96d56Sopenharmony_cithe full reference.
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci.. class:: Extension
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   The Extension class describes a single C or C++ extension module in a setup
1807db96d56Sopenharmony_ci   script. It accepts the following keyword arguments in its constructor:
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|l|
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
1857db96d56Sopenharmony_ci   | argument name          | value                          | type                      |
1867db96d56Sopenharmony_ci   +========================+================================+===========================+
1877db96d56Sopenharmony_ci   | *name*                 | the full name of the           | a string                  |
1887db96d56Sopenharmony_ci   |                        | extension, including any       |                           |
1897db96d56Sopenharmony_ci   |                        | packages --- ie. *not* a       |                           |
1907db96d56Sopenharmony_ci   |                        | filename or pathname, but      |                           |
1917db96d56Sopenharmony_ci   |                        | Python dotted name             |                           |
1927db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
1937db96d56Sopenharmony_ci   | *sources*              | list of source filenames,      | a list of strings         |
1947db96d56Sopenharmony_ci   |                        | relative to the distribution   |                           |
1957db96d56Sopenharmony_ci   |                        | root (where the setup script   |                           |
1967db96d56Sopenharmony_ci   |                        | lives), in Unix form           |                           |
1977db96d56Sopenharmony_ci   |                        | (slash-separated) for          |                           |
1987db96d56Sopenharmony_ci   |                        | portability.                   |                           |
1997db96d56Sopenharmony_ci   |                        | Source files may be C, C++,    |                           |
2007db96d56Sopenharmony_ci   |                        | SWIG (.i), platform-specific   |                           |
2017db96d56Sopenharmony_ci   |                        | resource files, or whatever    |                           |
2027db96d56Sopenharmony_ci   |                        | else is recognized by the      |                           |
2037db96d56Sopenharmony_ci   |                        | :command:`build_ext` command   |                           |
2047db96d56Sopenharmony_ci   |                        | as source for a Python         |                           |
2057db96d56Sopenharmony_ci   |                        | extension.                     |                           |
2067db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2077db96d56Sopenharmony_ci   | *include_dirs*         | list of directories to search  | a list of strings         |
2087db96d56Sopenharmony_ci   |                        | for C/C++ header files (in     |                           |
2097db96d56Sopenharmony_ci   |                        | Unix form for portability)     |                           |
2107db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2117db96d56Sopenharmony_ci   | *define_macros*        | list of macros to define; each | a list of tuples          |
2127db96d56Sopenharmony_ci   |                        | macro is defined using a       |                           |
2137db96d56Sopenharmony_ci   |                        | 2-tuple ``(name, value)``,     |                           |
2147db96d56Sopenharmony_ci   |                        | where *value* is               |                           |
2157db96d56Sopenharmony_ci   |                        | either the string to define it |                           |
2167db96d56Sopenharmony_ci   |                        | to or ``None`` to define it    |                           |
2177db96d56Sopenharmony_ci   |                        | without a particular value     |                           |
2187db96d56Sopenharmony_ci   |                        | (equivalent of ``#define FOO`` |                           |
2197db96d56Sopenharmony_ci   |                        | in source or :option:`!-DFOO`  |                           |
2207db96d56Sopenharmony_ci   |                        | on Unix C compiler command     |                           |
2217db96d56Sopenharmony_ci   |                        | line)                          |                           |
2227db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2237db96d56Sopenharmony_ci   | *undef_macros*         | list of macros to undefine     | a list of strings         |
2247db96d56Sopenharmony_ci   |                        | explicitly                     |                           |
2257db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2267db96d56Sopenharmony_ci   | *library_dirs*         | list of directories to search  | a list of strings         |
2277db96d56Sopenharmony_ci   |                        | for C/C++ libraries at link    |                           |
2287db96d56Sopenharmony_ci   |                        | time                           |                           |
2297db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2307db96d56Sopenharmony_ci   | *libraries*            | list of library names (not     | a list of strings         |
2317db96d56Sopenharmony_ci   |                        | filenames or paths) to link    |                           |
2327db96d56Sopenharmony_ci   |                        | against                        |                           |
2337db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2347db96d56Sopenharmony_ci   | *runtime_library_dirs* | list of directories to search  | a list of strings         |
2357db96d56Sopenharmony_ci   |                        | for C/C++ libraries at run     |                           |
2367db96d56Sopenharmony_ci   |                        | time (for shared extensions,   |                           |
2377db96d56Sopenharmony_ci   |                        | this is when the extension is  |                           |
2387db96d56Sopenharmony_ci   |                        | loaded)                        |                           |
2397db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2407db96d56Sopenharmony_ci   | *extra_objects*        | list of extra files to link    | a list of strings         |
2417db96d56Sopenharmony_ci   |                        | with (eg. object files not     |                           |
2427db96d56Sopenharmony_ci   |                        | implied by 'sources', static   |                           |
2437db96d56Sopenharmony_ci   |                        | library that must be           |                           |
2447db96d56Sopenharmony_ci   |                        | explicitly specified, binary   |                           |
2457db96d56Sopenharmony_ci   |                        | resource files, etc.)          |                           |
2467db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2477db96d56Sopenharmony_ci   | *extra_compile_args*   | any extra platform- and        | a list of strings         |
2487db96d56Sopenharmony_ci   |                        | compiler-specific information  |                           |
2497db96d56Sopenharmony_ci   |                        | to use when compiling the      |                           |
2507db96d56Sopenharmony_ci   |                        | source files in 'sources'. For |                           |
2517db96d56Sopenharmony_ci   |                        | platforms and compilers where  |                           |
2527db96d56Sopenharmony_ci   |                        | a command line makes sense,    |                           |
2537db96d56Sopenharmony_ci   |                        | this is typically a list of    |                           |
2547db96d56Sopenharmony_ci   |                        | command-line arguments, but    |                           |
2557db96d56Sopenharmony_ci   |                        | for other platforms it could   |                           |
2567db96d56Sopenharmony_ci   |                        | be anything.                   |                           |
2577db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2587db96d56Sopenharmony_ci   | *extra_link_args*      | any extra platform- and        | a list of strings         |
2597db96d56Sopenharmony_ci   |                        | compiler-specific information  |                           |
2607db96d56Sopenharmony_ci   |                        | to use when linking object     |                           |
2617db96d56Sopenharmony_ci   |                        | files together to create the   |                           |
2627db96d56Sopenharmony_ci   |                        | extension (or to create a new  |                           |
2637db96d56Sopenharmony_ci   |                        | static Python interpreter).    |                           |
2647db96d56Sopenharmony_ci   |                        | Similar interpretation as for  |                           |
2657db96d56Sopenharmony_ci   |                        | 'extra_compile_args'.          |                           |
2667db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2677db96d56Sopenharmony_ci   | *export_symbols*       | list of symbols to be exported | a list of strings         |
2687db96d56Sopenharmony_ci   |                        | from a shared extension. Not   |                           |
2697db96d56Sopenharmony_ci   |                        | used on all platforms, and not |                           |
2707db96d56Sopenharmony_ci   |                        | generally necessary for Python |                           |
2717db96d56Sopenharmony_ci   |                        | extensions, which typically    |                           |
2727db96d56Sopenharmony_ci   |                        | export exactly one symbol:     |                           |
2737db96d56Sopenharmony_ci   |                        | ``init`` + extension_name.     |                           |
2747db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2757db96d56Sopenharmony_ci   | *depends*              | list of files that the         | a list of strings         |
2767db96d56Sopenharmony_ci   |                        | extension depends on           |                           |
2777db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2787db96d56Sopenharmony_ci   | *language*             | extension language (i.e.       | a string                  |
2797db96d56Sopenharmony_ci   |                        | ``'c'``, ``'c++'``,            |                           |
2807db96d56Sopenharmony_ci   |                        | ``'objc'``). Will be detected  |                           |
2817db96d56Sopenharmony_ci   |                        | from the source extensions if  |                           |
2827db96d56Sopenharmony_ci   |                        | not provided.                  |                           |
2837db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2847db96d56Sopenharmony_ci   | *optional*             | specifies that a build failure | a boolean                 |
2857db96d56Sopenharmony_ci   |                        | in the extension should not    |                           |
2867db96d56Sopenharmony_ci   |                        | abort the build process, but   |                           |
2877db96d56Sopenharmony_ci   |                        | simply skip the extension.     |                           |
2887db96d56Sopenharmony_ci   +------------------------+--------------------------------+---------------------------+
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci   .. versionchanged:: 3.8
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci      On Unix, C extensions are no longer linked to libpython except on
2937db96d56Sopenharmony_ci      Android and Cygwin.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci.. class:: Distribution
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   A :class:`Distribution` describes how to build, install and package up a Python
2997db96d56Sopenharmony_ci   software package.
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci   See the :func:`setup` function for a list of keyword arguments accepted  by the
3027db96d56Sopenharmony_ci   Distribution constructor. :func:`setup` creates a Distribution instance.
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci   .. versionchanged:: 3.7
3057db96d56Sopenharmony_ci      :class:`~distutils.core.Distribution` now warns if ``classifiers``,
3067db96d56Sopenharmony_ci      ``keywords`` and ``platforms`` fields are not specified as a list or
3077db96d56Sopenharmony_ci      a string.
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci.. class:: Command
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   A :class:`Command` class (or rather, an instance of one of its subclasses)
3127db96d56Sopenharmony_ci   implement a single distutils command.
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci:mod:`distutils.ccompiler` --- CCompiler base class
3167db96d56Sopenharmony_ci===================================================
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci.. module:: distutils.ccompiler
3197db96d56Sopenharmony_ci   :synopsis: Abstract CCompiler class
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ciThis module provides the abstract base class for the :class:`CCompiler`
3237db96d56Sopenharmony_ciclasses.  A :class:`CCompiler` instance can be used for all the compile  and
3247db96d56Sopenharmony_cilink steps needed to build a single project. Methods are provided to  set
3257db96d56Sopenharmony_cioptions for the compiler --- macro definitions, include directories,  link path,
3267db96d56Sopenharmony_cilibraries and the like.
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ciThis module provides the following functions.
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci.. function:: gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries)
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci   Generate linker options for searching library directories and linking with
3347db96d56Sopenharmony_ci   specific libraries.  *libraries* and *library_dirs* are, respectively, lists of
3357db96d56Sopenharmony_ci   library names (not filenames!) and search directories.  Returns a list of
3367db96d56Sopenharmony_ci   command-line options suitable for use with some compiler (depending on the two
3377db96d56Sopenharmony_ci   format strings passed in).
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci.. function:: gen_preprocess_options(macros, include_dirs)
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci   Generate C pre-processor options (:option:`!-D`, :option:`!-U`, :option:`!-I`) as
3437db96d56Sopenharmony_ci   used by at least two types of compilers: the typical Unix compiler and Visual
3447db96d56Sopenharmony_ci   C++. *macros* is the usual thing, a list of 1- or 2-tuples, where ``(name,)``
3457db96d56Sopenharmony_ci   means undefine (:option:`!-U`) macro *name*, and ``(name, value)`` means define
3467db96d56Sopenharmony_ci   (:option:`!-D`) macro *name* to *value*.  *include_dirs* is just a list of
3477db96d56Sopenharmony_ci   directory names to be added to the header file search path (:option:`!-I`).
3487db96d56Sopenharmony_ci   Returns a list of command-line options suitable for either Unix compilers or
3497db96d56Sopenharmony_ci   Visual C++.
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci.. function:: get_default_compiler(osname, platform)
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci   Determine the default compiler to use for the given platform.
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   *osname* should be one of the standard Python OS names (i.e. the ones returned
3577db96d56Sopenharmony_ci   by ``os.name``) and *platform* the common value returned by ``sys.platform`` for
3587db96d56Sopenharmony_ci   the platform in question.
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci   The default values are ``os.name`` and ``sys.platform`` in case the parameters
3617db96d56Sopenharmony_ci   are not given.
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ci.. function:: new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0)
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci   Factory function to generate an instance of some CCompiler subclass for the
3677db96d56Sopenharmony_ci   supplied platform/compiler combination. *plat* defaults to ``os.name`` (eg.
3687db96d56Sopenharmony_ci   ``'posix'``, ``'nt'``), and *compiler*  defaults to the default compiler for
3697db96d56Sopenharmony_ci   that platform. Currently only ``'posix'`` and ``'nt'`` are supported, and the
3707db96d56Sopenharmony_ci   default compilers are "traditional Unix interface" (:class:`UnixCCompiler`
3717db96d56Sopenharmony_ci   class) and Visual C++ (:class:`MSVCCompiler` class).  Note that it's perfectly
3727db96d56Sopenharmony_ci   possible to ask for a Unix compiler object under Windows, and a Microsoft
3737db96d56Sopenharmony_ci   compiler object under Unix---if you supply a value for *compiler*, *plat* is
3747db96d56Sopenharmony_ci   ignored.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci   .. % Is the posix/nt only thing still true? macOS seems to work, and
3777db96d56Sopenharmony_ci   .. % returns a UnixCCompiler instance. How to document this... hmm.
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci.. function:: show_compilers()
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci   Print list of available compilers (used by the :option:`!--help-compiler` options
3837db96d56Sopenharmony_ci   to :command:`build`, :command:`build_ext`, :command:`build_clib`).
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci.. class:: CCompiler([verbose=0, dry_run=0, force=0])
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   The abstract base class :class:`CCompiler` defines the interface that  must be
3897db96d56Sopenharmony_ci   implemented by real compiler classes.  The class also has  some utility methods
3907db96d56Sopenharmony_ci   used by several compiler classes.
3917db96d56Sopenharmony_ci
3927db96d56Sopenharmony_ci   The basic idea behind a compiler abstraction class is that each instance can be
3937db96d56Sopenharmony_ci   used for all the compile/link steps in building a single project.  Thus,
3947db96d56Sopenharmony_ci   attributes common to all of those compile and link steps --- include
3957db96d56Sopenharmony_ci   directories, macros to define, libraries to link against, etc. --- are
3967db96d56Sopenharmony_ci   attributes of the compiler instance.  To allow for variability in how individual
3977db96d56Sopenharmony_ci   files are treated, most of those attributes may be varied on a per-compilation
3987db96d56Sopenharmony_ci   or per-link basis.
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci   The constructor for each subclass creates an instance of the Compiler object.
4017db96d56Sopenharmony_ci   Flags are *verbose* (show verbose output), *dry_run* (don't actually execute the
4027db96d56Sopenharmony_ci   steps) and *force* (rebuild everything, regardless of dependencies). All of
4037db96d56Sopenharmony_ci   these flags default to ``0`` (off). Note that you probably don't want to
4047db96d56Sopenharmony_ci   instantiate :class:`CCompiler` or one of its subclasses directly - use the
4057db96d56Sopenharmony_ci   :func:`distutils.CCompiler.new_compiler` factory function instead.
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   The following methods allow you to manually alter compiler options for  the
4087db96d56Sopenharmony_ci   instance of the Compiler class.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_ci   .. method:: CCompiler.add_include_dir(dir)
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci      Add *dir* to the list of directories that will be searched for header files.
4147db96d56Sopenharmony_ci      The compiler is instructed to search directories in the order in which they are
4157db96d56Sopenharmony_ci      supplied by successive calls to :meth:`add_include_dir`.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci   .. method:: CCompiler.set_include_dirs(dirs)
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci      Set the list of directories that will be searched to *dirs* (a list of strings).
4217db96d56Sopenharmony_ci      Overrides any preceding calls to :meth:`add_include_dir`; subsequent calls to
4227db96d56Sopenharmony_ci      :meth:`add_include_dir` add to the list passed to :meth:`set_include_dirs`.
4237db96d56Sopenharmony_ci      This does not affect any list of standard include directories that the compiler
4247db96d56Sopenharmony_ci      may search by default.
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci   .. method:: CCompiler.add_library(libname)
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ci      Add *libname* to the list of libraries that will be included in all links driven
4307db96d56Sopenharmony_ci      by this compiler object.  Note that *libname* should \*not\* be the name of a
4317db96d56Sopenharmony_ci      file containing a library, but the name of the library itself: the actual
4327db96d56Sopenharmony_ci      filename will be inferred by the linker, the compiler, or the compiler class
4337db96d56Sopenharmony_ci      (depending on the platform).
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci      The linker will be instructed to link against libraries in the order they were
4367db96d56Sopenharmony_ci      supplied to :meth:`add_library` and/or :meth:`set_libraries`.  It is perfectly
4377db96d56Sopenharmony_ci      valid to duplicate library names; the linker will be instructed to link against
4387db96d56Sopenharmony_ci      libraries as many times as they are mentioned.
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   .. method:: CCompiler.set_libraries(libnames)
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci      Set the list of libraries to be included in all links driven by this compiler
4447db96d56Sopenharmony_ci      object to *libnames* (a list of strings).  This does not affect any standard
4457db96d56Sopenharmony_ci      system libraries that the linker may include by default.
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci   .. method:: CCompiler.add_library_dir(dir)
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci      Add *dir* to the list of directories that will be searched for libraries
4517db96d56Sopenharmony_ci      specified to :meth:`add_library` and :meth:`set_libraries`.  The linker will be
4527db96d56Sopenharmony_ci      instructed to search for libraries in the order they are supplied to
4537db96d56Sopenharmony_ci      :meth:`add_library_dir` and/or :meth:`set_library_dirs`.
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   .. method:: CCompiler.set_library_dirs(dirs)
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci      Set the list of library search directories to *dirs* (a list of strings).  This
4597db96d56Sopenharmony_ci      does not affect any standard library search path that the linker may search by
4607db96d56Sopenharmony_ci      default.
4617db96d56Sopenharmony_ci
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   .. method:: CCompiler.add_runtime_library_dir(dir)
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci      Add *dir* to the list of directories that will be searched for shared libraries
4667db96d56Sopenharmony_ci      at runtime.
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ci   .. method:: CCompiler.set_runtime_library_dirs(dirs)
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci      Set the list of directories to search for shared libraries at runtime to *dirs*
4727db96d56Sopenharmony_ci      (a list of strings).  This does not affect any standard search path that the
4737db96d56Sopenharmony_ci      runtime linker may search by default.
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci   .. method:: CCompiler.define_macro(name[, value=None])
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci      Define a preprocessor macro for all compilations driven by this compiler object.
4797db96d56Sopenharmony_ci      The optional parameter *value* should be a string; if it is not supplied, then
4807db96d56Sopenharmony_ci      the macro will be defined without an explicit value and the exact outcome
4817db96d56Sopenharmony_ci      depends on the compiler used.
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci      .. XXX true? does ANSI say anything about this?
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   .. method:: CCompiler.undefine_macro(name)
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci      Undefine a preprocessor macro for all compilations driven by this compiler
4897db96d56Sopenharmony_ci      object.  If the same macro is defined by :meth:`define_macro` and
4907db96d56Sopenharmony_ci      undefined by :meth:`undefine_macro` the last call takes precedence
4917db96d56Sopenharmony_ci      (including multiple redefinitions or undefinitions).  If the macro is
4927db96d56Sopenharmony_ci      redefined/undefined on a per-compilation basis (ie. in the call to
4937db96d56Sopenharmony_ci      :meth:`compile`), then that takes precedence.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ci   .. method:: CCompiler.add_link_object(object)
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci      Add *object* to the list of object files (or analogues, such as explicitly named
4997db96d56Sopenharmony_ci      library files or the output of "resource compilers") to be included in every
5007db96d56Sopenharmony_ci      link driven by this compiler object.
5017db96d56Sopenharmony_ci
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   .. method:: CCompiler.set_link_objects(objects)
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci      Set the list of object files (or analogues) to be included in every link to
5067db96d56Sopenharmony_ci      *objects*.  This does not affect any standard object files that the linker may
5077db96d56Sopenharmony_ci      include by default (such as system libraries).
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci   The following methods implement methods for autodetection of compiler  options,
5107db96d56Sopenharmony_ci   providing some functionality similar to GNU :program:`autoconf`.
5117db96d56Sopenharmony_ci
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci   .. method:: CCompiler.detect_language(sources)
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci      Detect the language of a given file, or list of files. Uses the  instance
5167db96d56Sopenharmony_ci      attributes :attr:`language_map` (a dictionary), and  :attr:`language_order` (a
5177db96d56Sopenharmony_ci      list) to do the job.
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci   .. method:: CCompiler.find_library_file(dirs, lib[, debug=0])
5217db96d56Sopenharmony_ci
5227db96d56Sopenharmony_ci      Search the specified list of directories for a static or shared library file
5237db96d56Sopenharmony_ci      *lib* and return the full path to that file.  If *debug* is true, look for a
5247db96d56Sopenharmony_ci      debugging version (if that makes sense on the current platform).  Return
5257db96d56Sopenharmony_ci      ``None`` if *lib* wasn't found in any of the specified directories.
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci   .. method:: CCompiler.has_function(funcname [, includes=None, include_dirs=None, libraries=None, library_dirs=None])
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci      Return a boolean indicating whether *funcname* is supported on the current
5317db96d56Sopenharmony_ci      platform.  The optional arguments can be used to augment the compilation
5327db96d56Sopenharmony_ci      environment by providing additional include files and paths and libraries and
5337db96d56Sopenharmony_ci      paths.
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci   .. method:: CCompiler.library_dir_option(dir)
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci      Return the compiler option to add *dir* to the list of directories searched for
5397db96d56Sopenharmony_ci      libraries.
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci   .. method:: CCompiler.library_option(lib)
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci      Return the compiler option to add *lib* to the list of libraries linked into the
5457db96d56Sopenharmony_ci      shared library or executable.
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci   .. method:: CCompiler.runtime_library_dir_option(dir)
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci      Return the compiler option to add *dir* to the list of directories searched for
5517db96d56Sopenharmony_ci      runtime libraries.
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci   .. method:: CCompiler.set_executables(**args)
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci      Define the executables (and options for them) that will be run to perform the
5577db96d56Sopenharmony_ci      various stages of compilation.  The exact set of executables that may be
5587db96d56Sopenharmony_ci      specified here depends on the compiler class (via the 'executables' class
5597db96d56Sopenharmony_ci      attribute), but most will have:
5607db96d56Sopenharmony_ci
5617db96d56Sopenharmony_ci      +--------------+------------------------------------------+
5627db96d56Sopenharmony_ci      | attribute    | description                              |
5637db96d56Sopenharmony_ci      +==============+==========================================+
5647db96d56Sopenharmony_ci      | *compiler*   | the C/C++ compiler                       |
5657db96d56Sopenharmony_ci      +--------------+------------------------------------------+
5667db96d56Sopenharmony_ci      | *linker_so*  | linker used to create shared objects and |
5677db96d56Sopenharmony_ci      |              | libraries                                |
5687db96d56Sopenharmony_ci      +--------------+------------------------------------------+
5697db96d56Sopenharmony_ci      | *linker_exe* | linker used to create binary executables |
5707db96d56Sopenharmony_ci      +--------------+------------------------------------------+
5717db96d56Sopenharmony_ci      | *archiver*   | static library creator                   |
5727db96d56Sopenharmony_ci      +--------------+------------------------------------------+
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci      On platforms with a command-line (Unix, DOS/Windows), each of these is a string
5757db96d56Sopenharmony_ci      that will be split into executable name and (optional) list of arguments.
5767db96d56Sopenharmony_ci      (Splitting the string is done similarly to how Unix shells operate: words are
5777db96d56Sopenharmony_ci      delimited by spaces, but quotes and backslashes can override this.  See
5787db96d56Sopenharmony_ci      :func:`distutils.util.split_quoted`.)
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   The following methods invoke stages in the build process.
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci   .. method:: CCompiler.compile(sources[, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None])
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ci      Compile one or more source files. Generates object files (e.g.  transforms a
5867db96d56Sopenharmony_ci      :file:`.c` file to a :file:`.o` file.)
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci      *sources* must be a list of filenames, most likely C/C++ files, but in reality
5897db96d56Sopenharmony_ci      anything that can be handled by a particular compiler and compiler class (eg.
5907db96d56Sopenharmony_ci      :class:`MSVCCompiler` can handle resource files in *sources*).  Return a list of
5917db96d56Sopenharmony_ci      object filenames, one per source filename in *sources*.  Depending on the
5927db96d56Sopenharmony_ci      implementation, not all source files will necessarily be compiled, but all
5937db96d56Sopenharmony_ci      corresponding object filenames will be returned.
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci      If *output_dir* is given, object files will be put under it, while retaining
5967db96d56Sopenharmony_ci      their original path component.  That is, :file:`foo/bar.c` normally compiles to
5977db96d56Sopenharmony_ci      :file:`foo/bar.o` (for a Unix implementation); if *output_dir* is *build*, then
5987db96d56Sopenharmony_ci      it would compile to :file:`build/foo/bar.o`.
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci      *macros*, if given, must be a list of macro definitions.  A macro definition is
6017db96d56Sopenharmony_ci      either a ``(name, value)`` 2-tuple or a ``(name,)`` 1-tuple. The former defines
6027db96d56Sopenharmony_ci      a macro; if the value is ``None``, the macro is defined without an explicit
6037db96d56Sopenharmony_ci      value.  The 1-tuple case undefines a macro.  Later
6047db96d56Sopenharmony_ci      definitions/redefinitions/undefinitions take precedence.
6057db96d56Sopenharmony_ci
6067db96d56Sopenharmony_ci      *include_dirs*, if given, must be a list of strings, the directories to add to
6077db96d56Sopenharmony_ci      the default include file search path for this compilation only.
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ci      *debug* is a boolean; if true, the compiler will be instructed to output debug
6107db96d56Sopenharmony_ci      symbols in (or alongside) the object file(s).
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci      *extra_preargs* and *extra_postargs* are implementation-dependent. On platforms
6137db96d56Sopenharmony_ci      that have the notion of a command-line (e.g. Unix, DOS/Windows), they are most
6147db96d56Sopenharmony_ci      likely lists of strings: extra command-line arguments to prepend/append to the
6157db96d56Sopenharmony_ci      compiler command line.  On other platforms, consult the implementation class
6167db96d56Sopenharmony_ci      documentation.  In any event, they are intended as an escape hatch for those
6177db96d56Sopenharmony_ci      occasions when the abstract compiler framework doesn't cut the mustard.
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci      *depends*, if given, is a list of filenames that all targets depend on.  If a
6207db96d56Sopenharmony_ci      source file is older than any file in depends, then the source file will be
6217db96d56Sopenharmony_ci      recompiled.  This supports dependency tracking, but only at a coarse
6227db96d56Sopenharmony_ci      granularity.
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci      Raises :exc:`CompileError` on failure.
6257db96d56Sopenharmony_ci
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci   .. method:: CCompiler.create_static_lib(objects, output_libname[, output_dir=None, debug=0, target_lang=None])
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci      Link a bunch of stuff together to create a static library file. The "bunch of
6307db96d56Sopenharmony_ci      stuff" consists of the list of object files supplied as *objects*, the extra
6317db96d56Sopenharmony_ci      object files supplied to :meth:`add_link_object` and/or
6327db96d56Sopenharmony_ci      :meth:`set_link_objects`, the libraries supplied to :meth:`add_library` and/or
6337db96d56Sopenharmony_ci      :meth:`set_libraries`, and the libraries supplied as *libraries* (if any).
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci      *output_libname* should be a library name, not a filename; the filename will be
6367db96d56Sopenharmony_ci      inferred from the library name.  *output_dir* is the directory where the library
6377db96d56Sopenharmony_ci      file will be put.
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci      .. XXX defaults to what?
6407db96d56Sopenharmony_ci
6417db96d56Sopenharmony_ci      *debug* is a boolean; if true, debugging information will be included in the
6427db96d56Sopenharmony_ci      library (note that on most platforms, it is the compile step where this matters:
6437db96d56Sopenharmony_ci      the *debug* flag is included here just for consistency).
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci      *target_lang* is the target language for which the given objects are being
6467db96d56Sopenharmony_ci      compiled. This allows specific linkage time treatment of certain languages.
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci      Raises :exc:`LibError` on failure.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci   .. method:: CCompiler.link(target_desc, objects, output_filename[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None])
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci      Link a bunch of stuff together to create an executable or shared library file.
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ci      The "bunch of stuff" consists of the list of object files supplied as *objects*.
6567db96d56Sopenharmony_ci      *output_filename* should be a filename.  If *output_dir* is supplied,
6577db96d56Sopenharmony_ci      *output_filename* is relative to it (i.e. *output_filename* can provide
6587db96d56Sopenharmony_ci      directory components if needed).
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci      *libraries* is a list of libraries to link against.  These are library names,
6617db96d56Sopenharmony_ci      not filenames, since they're translated into filenames in a platform-specific
6627db96d56Sopenharmony_ci      way (eg. *foo* becomes :file:`libfoo.a` on Unix and :file:`foo.lib` on
6637db96d56Sopenharmony_ci      DOS/Windows).  However, they can include a directory component, which means the
6647db96d56Sopenharmony_ci      linker will look in that specific directory rather than searching all the normal
6657db96d56Sopenharmony_ci      locations.
6667db96d56Sopenharmony_ci
6677db96d56Sopenharmony_ci      *library_dirs*, if supplied, should be a list of directories to search for
6687db96d56Sopenharmony_ci      libraries that were specified as bare library names (ie. no directory
6697db96d56Sopenharmony_ci      component).  These are on top of the system default and those supplied to
6707db96d56Sopenharmony_ci      :meth:`add_library_dir` and/or :meth:`set_library_dirs`.  *runtime_library_dirs*
6717db96d56Sopenharmony_ci      is a list of directories that will be embedded into the shared library and used
6727db96d56Sopenharmony_ci      to search for other shared libraries that \*it\* depends on at run-time.  (This
6737db96d56Sopenharmony_ci      may only be relevant on Unix.)
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci      *export_symbols* is a list of symbols that the shared library will export.
6767db96d56Sopenharmony_ci      (This appears to be relevant only on Windows.)
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci      *debug* is as for :meth:`compile` and :meth:`create_static_lib`,  with the
6797db96d56Sopenharmony_ci      slight distinction that it actually matters on most platforms (as opposed to
6807db96d56Sopenharmony_ci      :meth:`create_static_lib`, which includes a *debug* flag mostly for form's
6817db96d56Sopenharmony_ci      sake).
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci      *extra_preargs* and *extra_postargs* are as for :meth:`compile`  (except of
6847db96d56Sopenharmony_ci      course that they supply command-line arguments for the particular linker being
6857db96d56Sopenharmony_ci      used).
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci      *target_lang* is the target language for which the given objects are being
6887db96d56Sopenharmony_ci      compiled. This allows specific linkage time treatment of certain languages.
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ci      Raises :exc:`LinkError` on failure.
6917db96d56Sopenharmony_ci
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci   .. method:: CCompiler.link_executable(objects, output_progname[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, target_lang=None])
6947db96d56Sopenharmony_ci
6957db96d56Sopenharmony_ci      Link an executable.  *output_progname* is the name of the file executable, while
6967db96d56Sopenharmony_ci      *objects* are a list of object filenames to link in. Other arguments  are as for
6977db96d56Sopenharmony_ci      the :meth:`link` method.
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci
7007db96d56Sopenharmony_ci   .. method:: CCompiler.link_shared_lib(objects, output_libname[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None])
7017db96d56Sopenharmony_ci
7027db96d56Sopenharmony_ci      Link a shared library. *output_libname* is the name of the output  library,
7037db96d56Sopenharmony_ci      while *objects* is a list of object filenames to link in.  Other arguments are
7047db96d56Sopenharmony_ci      as for the :meth:`link` method.
7057db96d56Sopenharmony_ci
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   .. method:: CCompiler.link_shared_object(objects, output_filename[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None])
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ci      Link a shared object. *output_filename* is the name of the shared object that
7107db96d56Sopenharmony_ci      will be created, while *objects* is a list of object filenames  to link in.
7117db96d56Sopenharmony_ci      Other arguments are as for the :meth:`link` method.
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_ci   .. method:: CCompiler.preprocess(source[, output_file=None, macros=None, include_dirs=None, extra_preargs=None, extra_postargs=None])
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci      Preprocess a single C/C++ source file, named in *source*. Output will be written
7177db96d56Sopenharmony_ci      to file named *output_file*, or *stdout* if *output_file* not supplied.
7187db96d56Sopenharmony_ci      *macros* is a list of macro definitions as for :meth:`compile`, which will
7197db96d56Sopenharmony_ci      augment the macros set with :meth:`define_macro` and :meth:`undefine_macro`.
7207db96d56Sopenharmony_ci      *include_dirs* is a list of directory names that will be added to the  default
7217db96d56Sopenharmony_ci      list, in the same way as :meth:`add_include_dir`.
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci      Raises :exc:`PreprocessError` on failure.
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci   The following utility methods are defined by the :class:`CCompiler` class, for
7267db96d56Sopenharmony_ci   use by the various concrete subclasses.
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci   .. method:: CCompiler.executable_filename(basename[, strip_dir=0, output_dir=''])
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci      Returns the filename of the executable for the given *basename*.  Typically for
7327db96d56Sopenharmony_ci      non-Windows platforms this is the same as the basename,  while Windows will get
7337db96d56Sopenharmony_ci      a :file:`.exe` added.
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ci   .. method:: CCompiler.library_filename(libname[, lib_type='static', strip_dir=0, output_dir=''])
7377db96d56Sopenharmony_ci
7387db96d56Sopenharmony_ci      Returns the filename for the given library name on the current platform. On Unix
7397db96d56Sopenharmony_ci      a library with *lib_type* of ``'static'`` will typically  be of the form
7407db96d56Sopenharmony_ci      :file:`liblibname.a`, while a *lib_type* of ``'dynamic'``  will be of the form
7417db96d56Sopenharmony_ci      :file:`liblibname.so`.
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ci   .. method:: CCompiler.object_filenames(source_filenames[, strip_dir=0, output_dir=''])
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci      Returns the name of the object files for the given source files.
7477db96d56Sopenharmony_ci      *source_filenames* should be a list of filenames.
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   .. method:: CCompiler.shared_object_filename(basename[, strip_dir=0, output_dir=''])
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci      Returns the name of a shared object file for the given file name *basename*.
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci   .. method:: CCompiler.execute(func, args[, msg=None, level=1])
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci      Invokes :func:`distutils.util.execute`. This method invokes a  Python function
7587db96d56Sopenharmony_ci      *func* with the given arguments *args*, after  logging and taking into account
7597db96d56Sopenharmony_ci      the *dry_run* flag.
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ci   .. method:: CCompiler.spawn(cmd)
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ci      Invokes :func:`distutils.util.spawn`. This invokes an external  process to run
7657db96d56Sopenharmony_ci      the given command.
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ci   .. method:: CCompiler.mkpath(name[, mode=511])
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ci      Invokes :func:`distutils.dir_util.mkpath`. This creates a directory  and any
7717db96d56Sopenharmony_ci      missing ancestor directories.
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci   .. method:: CCompiler.move_file(src, dst)
7757db96d56Sopenharmony_ci
7767db96d56Sopenharmony_ci      Invokes :meth:`distutils.file_util.move_file`. Renames *src* to  *dst*.
7777db96d56Sopenharmony_ci
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_ci   .. method:: CCompiler.announce(msg[, level=1])
7807db96d56Sopenharmony_ci
7817db96d56Sopenharmony_ci      Write a message using :func:`distutils.log.debug`.
7827db96d56Sopenharmony_ci
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci   .. method:: CCompiler.warn(msg)
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci      Write a warning message *msg* to standard error.
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   .. method:: CCompiler.debug_print(msg)
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci      If the *debug* flag is set on this :class:`CCompiler` instance, print  *msg* to
7927db96d56Sopenharmony_ci      standard output, otherwise do nothing.
7937db96d56Sopenharmony_ci
7947db96d56Sopenharmony_ci.. % \subsection{Compiler-specific modules}
7957db96d56Sopenharmony_ci.. %
7967db96d56Sopenharmony_ci.. % The following modules implement concrete subclasses of the abstract
7977db96d56Sopenharmony_ci.. % \class{CCompiler} class. They should not be instantiated directly, but should
7987db96d56Sopenharmony_ci.. % be created using \function{distutils.ccompiler.new_compiler()} factory
7997db96d56Sopenharmony_ci.. % function.
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci:mod:`distutils.unixccompiler` --- Unix C Compiler
8037db96d56Sopenharmony_ci==================================================
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ci.. module:: distutils.unixccompiler
8067db96d56Sopenharmony_ci   :synopsis: UNIX C Compiler
8077db96d56Sopenharmony_ci
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ciThis module provides the :class:`UnixCCompiler` class, a subclass of
8107db96d56Sopenharmony_ci:class:`CCompiler` that handles the typical Unix-style command-line  C compiler:
8117db96d56Sopenharmony_ci
8127db96d56Sopenharmony_ci* macros defined with :option:`!-Dname[=value]`
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci* macros undefined with :option:`!-Uname`
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci* include search directories specified with :option:`!-Idir`
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci* libraries specified with :option:`!-llib`
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci* library search directories specified with :option:`!-Ldir`
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci* compile handled by :program:`cc` (or similar) executable with :option:`!-c`
8237db96d56Sopenharmony_ci  option: compiles :file:`.c` to :file:`.o`
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci* link static library handled by :program:`ar` command (possibly with
8267db96d56Sopenharmony_ci  :program:`ranlib`)
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci* link shared library handled by :program:`cc` :option:`!-shared`
8297db96d56Sopenharmony_ci
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci:mod:`distutils.msvccompiler` --- Microsoft Compiler
8327db96d56Sopenharmony_ci====================================================
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ci.. module:: distutils.msvccompiler
8357db96d56Sopenharmony_ci   :synopsis: Microsoft Compiler
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci.. XXX: This is *waaaaay* out of date!
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ciThis module provides :class:`MSVCCompiler`, an implementation of the abstract
8407db96d56Sopenharmony_ci:class:`CCompiler` class for Microsoft Visual Studio. Typically, extension
8417db96d56Sopenharmony_cimodules need to be compiled with the same compiler that was used to compile
8427db96d56Sopenharmony_ciPython. For Python 2.3 and earlier, the compiler was Visual Studio 6. For Python
8437db96d56Sopenharmony_ci2.4 and 2.5, the compiler is Visual Studio .NET 2003.
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci:class:`MSVCCompiler` will normally choose the right compiler, linker etc. on
8467db96d56Sopenharmony_ciits own. To override this choice, the environment variables *DISTUTILS_USE_SDK*
8477db96d56Sopenharmony_ciand *MSSdk* must be both set. *MSSdk* indicates that the current environment has
8487db96d56Sopenharmony_cibeen setup by the SDK's ``SetEnv.Cmd`` script, or that the environment variables
8497db96d56Sopenharmony_cihad been registered when the SDK was installed; *DISTUTILS_USE_SDK* indicates
8507db96d56Sopenharmony_cithat the distutils user has made an explicit choice to override the compiler
8517db96d56Sopenharmony_ciselection by :class:`MSVCCompiler`.
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci:mod:`distutils.bcppcompiler` --- Borland Compiler
8557db96d56Sopenharmony_ci==================================================
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci.. module:: distutils.bcppcompiler
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci
8607db96d56Sopenharmony_ciThis module provides :class:`BorlandCCompiler`, a subclass of the abstract
8617db96d56Sopenharmony_ci:class:`CCompiler` class for the Borland C++ compiler.
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci:mod:`distutils.cygwincompiler` --- Cygwin Compiler
8657db96d56Sopenharmony_ci===================================================
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci.. module:: distutils.cygwinccompiler
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ciThis module provides the :class:`CygwinCCompiler` class, a subclass of
8717db96d56Sopenharmony_ci:class:`UnixCCompiler` that handles the Cygwin port of the GNU C compiler to
8727db96d56Sopenharmony_ciWindows.  It also contains the Mingw32CCompiler class which handles the mingw32
8737db96d56Sopenharmony_ciport of GCC (same as cygwin in no-cygwin mode).
8747db96d56Sopenharmony_ci
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci:mod:`distutils.archive_util` ---  Archiving utilities
8777db96d56Sopenharmony_ci======================================================
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci.. module:: distutils.archive_util
8807db96d56Sopenharmony_ci   :synopsis: Utility functions for creating archive files (tarballs, zip files, ...)
8817db96d56Sopenharmony_ci
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ciThis module provides a few functions for creating archive files, such as
8847db96d56Sopenharmony_citarballs or zipfiles.
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci
8877db96d56Sopenharmony_ci.. function:: make_archive(base_name, format[, root_dir=None, base_dir=None, verbose=0, dry_run=0])
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci   Create an archive file (eg. ``zip`` or ``tar``).  *base_name*  is the name of
8907db96d56Sopenharmony_ci   the file to create, minus any format-specific extension;  *format* is the
8917db96d56Sopenharmony_ci   archive format: one of ``zip``, ``tar``, ``gztar``, ``bztar``, ``xztar``, or
8927db96d56Sopenharmony_ci   ``ztar``. *root_dir* is a directory that will be the root directory of the
8937db96d56Sopenharmony_ci   archive; ie. we typically ``chdir`` into *root_dir* before  creating the
8947db96d56Sopenharmony_ci   archive.  *base_dir* is the directory where we start  archiving from; ie.
8957db96d56Sopenharmony_ci   *base_dir* will be the common prefix of all files and directories in the
8967db96d56Sopenharmony_ci   archive.  *root_dir* and *base_dir* both default to the current directory.
8977db96d56Sopenharmony_ci   Returns the name of the archive file.
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci   .. versionchanged:: 3.5
9007db96d56Sopenharmony_ci      Added support for the ``xztar`` format.
9017db96d56Sopenharmony_ci
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci.. function:: make_tarball(base_name, base_dir[, compress='gzip', verbose=0, dry_run=0])
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ci   'Create an (optional compressed) archive as a tar file from all files in and
9067db96d56Sopenharmony_ci   under *base_dir*. *compress* must be ``'gzip'`` (the default),
9077db96d56Sopenharmony_ci   ``'bzip2'``, ``'xz'``, ``'compress'``, or ``None``.  For the ``'compress'``
9087db96d56Sopenharmony_ci   method the compression utility named by :program:`compress` must be on the
9097db96d56Sopenharmony_ci   default program search path, so this is probably Unix-specific.  The output
9107db96d56Sopenharmony_ci   tar file will be named :file:`base_dir.tar`, possibly plus the appropriate
9117db96d56Sopenharmony_ci   compression extension (``.gz``, ``.bz2``, ``.xz`` or ``.Z``).  Return the
9127db96d56Sopenharmony_ci   output filename.
9137db96d56Sopenharmony_ci
9147db96d56Sopenharmony_ci   .. versionchanged:: 3.5
9157db96d56Sopenharmony_ci      Added support for the ``xz`` compression.
9167db96d56Sopenharmony_ci
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci.. function:: make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci   Create a zip file from all files in and under *base_dir*.  The output zip file
9217db96d56Sopenharmony_ci   will be named *base_name* + :file:`.zip`.  Uses either the  :mod:`zipfile` Python
9227db96d56Sopenharmony_ci   module (if available) or the InfoZIP :file:`zip`  utility (if installed and
9237db96d56Sopenharmony_ci   found on the default search path).  If neither  tool is available, raises
9247db96d56Sopenharmony_ci   :exc:`DistutilsExecError`.   Returns the name of the output zip file.
9257db96d56Sopenharmony_ci
9267db96d56Sopenharmony_ci
9277db96d56Sopenharmony_ci:mod:`distutils.dep_util` --- Dependency checking
9287db96d56Sopenharmony_ci=================================================
9297db96d56Sopenharmony_ci
9307db96d56Sopenharmony_ci.. module:: distutils.dep_util
9317db96d56Sopenharmony_ci   :synopsis: Utility functions for simple dependency checking
9327db96d56Sopenharmony_ci
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ciThis module provides functions for performing simple, timestamp-based
9357db96d56Sopenharmony_cidependency of files and groups of files; also, functions based entirely  on such
9367db96d56Sopenharmony_citimestamp dependency analysis.
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ci
9397db96d56Sopenharmony_ci.. function:: newer(source, target)
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci   Return true if *source* exists and is more recently modified than *target*, or
9427db96d56Sopenharmony_ci   if *source* exists and *target* doesn't. Return false if both exist and *target*
9437db96d56Sopenharmony_ci   is the same age or newer  than *source*. Raise :exc:`DistutilsFileError` if
9447db96d56Sopenharmony_ci   *source* does not exist.
9457db96d56Sopenharmony_ci
9467db96d56Sopenharmony_ci
9477db96d56Sopenharmony_ci.. function:: newer_pairwise(sources, targets)
9487db96d56Sopenharmony_ci
9497db96d56Sopenharmony_ci   Walk two filename lists in parallel, testing if each source is newer than its
9507db96d56Sopenharmony_ci   corresponding target.  Return a pair of lists (*sources*, *targets*) where
9517db96d56Sopenharmony_ci   source is newer than target, according to the semantics of :func:`newer`.
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci   .. % % equivalent to a listcomp...
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ci
9567db96d56Sopenharmony_ci.. function:: newer_group(sources, target[, missing='error'])
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci   Return true if *target* is out-of-date with respect to any file listed in
9597db96d56Sopenharmony_ci   *sources*.  In other words, if *target* exists and is newer than every file in
9607db96d56Sopenharmony_ci   *sources*, return false; otherwise return true. *missing* controls what we do
9617db96d56Sopenharmony_ci   when a source file is missing; the default (``'error'``) is to blow up with an
9627db96d56Sopenharmony_ci   :exc:`OSError` from  inside :func:`os.stat`; if it is ``'ignore'``, we silently
9637db96d56Sopenharmony_ci   drop any missing source files; if it is ``'newer'``, any missing source files
9647db96d56Sopenharmony_ci   make us assume that *target* is out-of-date (this is handy in "dry-run" mode:
9657db96d56Sopenharmony_ci   it'll make you pretend to carry out commands that wouldn't work because inputs
9667db96d56Sopenharmony_ci   are missing, but that doesn't matter because you're not actually going to run
9677db96d56Sopenharmony_ci   the commands).
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_ci:mod:`distutils.dir_util` --- Directory tree operations
9717db96d56Sopenharmony_ci=======================================================
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci.. module:: distutils.dir_util
9747db96d56Sopenharmony_ci   :synopsis: Utility functions for operating on directories and directory trees
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci
9777db96d56Sopenharmony_ciThis module provides functions for operating on directories and trees of
9787db96d56Sopenharmony_cidirectories.
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci
9817db96d56Sopenharmony_ci.. function:: mkpath(name[, mode=0o777, verbose=0, dry_run=0])
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ci   Create a directory and any missing ancestor directories.  If the directory
9847db96d56Sopenharmony_ci   already exists (or if *name* is the empty string, which means the current
9857db96d56Sopenharmony_ci   directory, which of course exists), then do nothing.  Raise
9867db96d56Sopenharmony_ci   :exc:`DistutilsFileError` if unable to create some directory along the way (eg.
9877db96d56Sopenharmony_ci   some sub-path exists, but is a file rather than a directory).  If *verbose* is
9887db96d56Sopenharmony_ci   true, print a one-line summary of each mkdir to stdout.  Return the list of
9897db96d56Sopenharmony_ci   directories actually created.
9907db96d56Sopenharmony_ci
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ci.. function:: create_tree(base_dir, files[, mode=0o777, verbose=0, dry_run=0])
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci   Create all the empty directories under *base_dir* needed to put *files* there.
9957db96d56Sopenharmony_ci   *base_dir* is just the name of a directory which doesn't necessarily exist
9967db96d56Sopenharmony_ci   yet; *files* is a list of filenames to be interpreted relative to *base_dir*.
9977db96d56Sopenharmony_ci   *base_dir* + the directory portion of every file in *files* will be created if
9987db96d56Sopenharmony_ci   it doesn't already exist.  *mode*, *verbose* and *dry_run* flags  are as for
9997db96d56Sopenharmony_ci   :func:`mkpath`.
10007db96d56Sopenharmony_ci
10017db96d56Sopenharmony_ci
10027db96d56Sopenharmony_ci.. function:: copy_tree(src, dst[, preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=0, verbose=0, dry_run=0])
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci   Copy an entire directory tree *src* to a new location *dst*.  Both *src* and
10057db96d56Sopenharmony_ci   *dst* must be directory names.  If *src* is not a directory, raise
10067db96d56Sopenharmony_ci   :exc:`DistutilsFileError`.  If *dst* does  not exist, it is created with
10077db96d56Sopenharmony_ci   :func:`mkpath`.  The end result of the  copy is that every file in *src* is
10087db96d56Sopenharmony_ci   copied to *dst*, and  directories under *src* are recursively copied to *dst*.
10097db96d56Sopenharmony_ci   Return the list of files that were copied or might have been copied, using their
10107db96d56Sopenharmony_ci   output name. The return value is unaffected by *update* or *dry_run*: it is
10117db96d56Sopenharmony_ci   simply the list of all files under *src*, with the names changed to be under
10127db96d56Sopenharmony_ci   *dst*.
10137db96d56Sopenharmony_ci
10147db96d56Sopenharmony_ci   *preserve_mode* and *preserve_times* are the same as for
10157db96d56Sopenharmony_ci   :func:`distutils.file_util.copy_file`; note that they only apply to
10167db96d56Sopenharmony_ci   regular files, not to
10177db96d56Sopenharmony_ci   directories.  If *preserve_symlinks* is true, symlinks will be copied as
10187db96d56Sopenharmony_ci   symlinks (on platforms that support them!); otherwise (the default), the
10197db96d56Sopenharmony_ci   destination of the symlink will be copied.  *update* and *verbose* are the same
10207db96d56Sopenharmony_ci   as for :func:`copy_file`.
10217db96d56Sopenharmony_ci
10227db96d56Sopenharmony_ci   Files in *src* that begin with :file:`.nfs` are skipped (more information on
10237db96d56Sopenharmony_ci   these files is available in answer D2 of the `NFS FAQ page
10247db96d56Sopenharmony_ci   <https://nfs.sourceforge.net/#section_d>`_).
10257db96d56Sopenharmony_ci
10267db96d56Sopenharmony_ci   .. versionchanged:: 3.3.1
10277db96d56Sopenharmony_ci      NFS files are ignored.
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ci.. function:: remove_tree(directory[, verbose=0, dry_run=0])
10307db96d56Sopenharmony_ci
10317db96d56Sopenharmony_ci   Recursively remove *directory* and all files and directories underneath it. Any
10327db96d56Sopenharmony_ci   errors are ignored (apart from being reported to ``sys.stdout`` if *verbose* is
10337db96d56Sopenharmony_ci   true).
10347db96d56Sopenharmony_ci
10357db96d56Sopenharmony_ci
10367db96d56Sopenharmony_ci:mod:`distutils.file_util` --- Single file operations
10377db96d56Sopenharmony_ci=====================================================
10387db96d56Sopenharmony_ci
10397db96d56Sopenharmony_ci.. module:: distutils.file_util
10407db96d56Sopenharmony_ci   :synopsis: Utility functions for operating on single files
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci
10437db96d56Sopenharmony_ciThis module contains some utility functions for operating on individual files.
10447db96d56Sopenharmony_ci
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci.. function:: copy_file(src, dst[, preserve_mode=1, preserve_times=1, update=0, link=None, verbose=0, dry_run=0])
10477db96d56Sopenharmony_ci
10487db96d56Sopenharmony_ci   Copy file *src* to *dst*. If *dst* is a directory, then *src* is copied there
10497db96d56Sopenharmony_ci   with the same name; otherwise, it must be a filename. (If the file exists, it
10507db96d56Sopenharmony_ci   will be ruthlessly clobbered.) If *preserve_mode* is true (the default), the
10517db96d56Sopenharmony_ci   file's mode (type and permission bits, or whatever is analogous on the
10527db96d56Sopenharmony_ci   current platform) is copied. If *preserve_times* is true (the default), the
10537db96d56Sopenharmony_ci   last-modified and last-access times are copied as well. If *update* is true,
10547db96d56Sopenharmony_ci   *src* will only be copied if *dst* does not exist, or if *dst* does exist but
10557db96d56Sopenharmony_ci   is older than *src*.
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci   *link* allows you to make hard links (using :func:`os.link`) or symbolic links
10587db96d56Sopenharmony_ci   (using :func:`os.symlink`) instead of copying: set it to ``'hard'`` or
10597db96d56Sopenharmony_ci   ``'sym'``; if it is ``None`` (the default), files are copied. Don't set *link*
10607db96d56Sopenharmony_ci   on systems that don't support it: :func:`copy_file` doesn't check if hard or
10617db96d56Sopenharmony_ci   symbolic linking is available.  It uses :func:`_copy_file_contents` to copy file
10627db96d56Sopenharmony_ci   contents.
10637db96d56Sopenharmony_ci
10647db96d56Sopenharmony_ci   Return a tuple ``(dest_name, copied)``: *dest_name* is the actual  name of the
10657db96d56Sopenharmony_ci   output file, and *copied* is true if the file was copied  (or would have been
10667db96d56Sopenharmony_ci   copied, if *dry_run* true).
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci   .. % XXX if the destination file already exists, we clobber it if
10697db96d56Sopenharmony_ci   .. % copying, but blow up if linking.  Hmmm.  And I don't know what
10707db96d56Sopenharmony_ci   .. % macostools.copyfile() does.  Should definitely be consistent, and
10717db96d56Sopenharmony_ci   .. % should probably blow up if destination exists and we would be
10727db96d56Sopenharmony_ci   .. % changing it (ie. it's not already a hard/soft link to src OR
10737db96d56Sopenharmony_ci   .. % (not update) and (src newer than dst)).
10747db96d56Sopenharmony_ci
10757db96d56Sopenharmony_ci
10767db96d56Sopenharmony_ci.. function:: move_file(src, dst[, verbose, dry_run])
10777db96d56Sopenharmony_ci
10787db96d56Sopenharmony_ci   Move file *src* to *dst*. If *dst* is a directory, the file will be moved into
10797db96d56Sopenharmony_ci   it with the same name; otherwise, *src* is just renamed to *dst*.  Returns the
10807db96d56Sopenharmony_ci   new full name of the file.
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci   .. warning::
10837db96d56Sopenharmony_ci
10847db96d56Sopenharmony_ci      Handles cross-device moves on Unix using :func:`copy_file`.  What about
10857db96d56Sopenharmony_ci      other systems?
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci
10887db96d56Sopenharmony_ci.. function:: write_file(filename, contents)
10897db96d56Sopenharmony_ci
10907db96d56Sopenharmony_ci   Create a file called *filename* and write *contents* (a sequence of strings
10917db96d56Sopenharmony_ci   without line terminators) to it.
10927db96d56Sopenharmony_ci
10937db96d56Sopenharmony_ci
10947db96d56Sopenharmony_ci:mod:`distutils.util` --- Miscellaneous other utility functions
10957db96d56Sopenharmony_ci===============================================================
10967db96d56Sopenharmony_ci
10977db96d56Sopenharmony_ci.. module:: distutils.util
10987db96d56Sopenharmony_ci   :synopsis: Miscellaneous other utility functions
10997db96d56Sopenharmony_ci
11007db96d56Sopenharmony_ci
11017db96d56Sopenharmony_ciThis module contains other assorted bits and pieces that don't fit into  any
11027db96d56Sopenharmony_ciother utility module.
11037db96d56Sopenharmony_ci
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci.. function:: get_platform()
11067db96d56Sopenharmony_ci
11077db96d56Sopenharmony_ci   Return a string that identifies the current platform.  This is used mainly to
11087db96d56Sopenharmony_ci   distinguish platform-specific build directories and platform-specific built
11097db96d56Sopenharmony_ci   distributions.  Typically includes the OS name and version and the
11107db96d56Sopenharmony_ci   architecture (as supplied by 'os.uname()'), although the exact information
11117db96d56Sopenharmony_ci   included depends on the OS; e.g., on Linux, the kernel version isn't
11127db96d56Sopenharmony_ci   particularly important.
11137db96d56Sopenharmony_ci
11147db96d56Sopenharmony_ci   Examples of returned values:
11157db96d56Sopenharmony_ci
11167db96d56Sopenharmony_ci   * ``linux-i586``
11177db96d56Sopenharmony_ci   * ``linux-alpha``
11187db96d56Sopenharmony_ci   * ``solaris-2.6-sun4u``
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ci   For non-POSIX platforms, currently just returns ``sys.platform``.
11217db96d56Sopenharmony_ci
11227db96d56Sopenharmony_ci   For macOS systems the OS version reflects the minimal version on which
11237db96d56Sopenharmony_ci   binaries will run (that is, the value of ``MACOSX_DEPLOYMENT_TARGET``
11247db96d56Sopenharmony_ci   during the build of Python), not the OS version of the current system.
11257db96d56Sopenharmony_ci
11267db96d56Sopenharmony_ci   For universal binary builds on macOS the architecture value reflects
11277db96d56Sopenharmony_ci   the universal binary status instead of the architecture of the current
11287db96d56Sopenharmony_ci   processor. For 32-bit universal binaries the architecture is ``fat``,
11297db96d56Sopenharmony_ci   for 64-bit universal binaries the architecture is ``fat64``, and
11307db96d56Sopenharmony_ci   for 4-way universal binaries the architecture is ``universal``. Starting
11317db96d56Sopenharmony_ci   from Python 2.7 and Python 3.2 the architecture ``fat3`` is used for
11327db96d56Sopenharmony_ci   a 3-way universal build (ppc, i386, x86_64) and ``intel`` is used for
11337db96d56Sopenharmony_ci   a universal build with the i386 and x86_64 architectures
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci   Examples of returned values on macOS:
11367db96d56Sopenharmony_ci
11377db96d56Sopenharmony_ci   * ``macosx-10.3-ppc``
11387db96d56Sopenharmony_ci
11397db96d56Sopenharmony_ci   * ``macosx-10.3-fat``
11407db96d56Sopenharmony_ci
11417db96d56Sopenharmony_ci   * ``macosx-10.5-universal``
11427db96d56Sopenharmony_ci
11437db96d56Sopenharmony_ci   * ``macosx-10.6-intel``
11447db96d56Sopenharmony_ci
11457db96d56Sopenharmony_ci   For AIX, Python 3.9 and later return a string starting with "aix", followed
11467db96d56Sopenharmony_ci   by additional fields (separated by ``'-'``) that represent the combined
11477db96d56Sopenharmony_ci   values of AIX Version, Release and Technology Level (first field), Build Date
11487db96d56Sopenharmony_ci   (second field), and bit-size (third field). Python 3.8 and earlier returned
11497db96d56Sopenharmony_ci   only a single additional field with the AIX Version and Release.
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci   Examples of returned values on AIX:
11527db96d56Sopenharmony_ci
11537db96d56Sopenharmony_ci   * ``aix-5307-0747-32`` # 32-bit build on AIX ``oslevel -s``: 5300-07-00-0000
11547db96d56Sopenharmony_ci
11557db96d56Sopenharmony_ci   * ``aix-7105-1731-64`` # 64-bit build on AIX ``oslevel -s``: 7100-05-01-1731
11567db96d56Sopenharmony_ci
11577db96d56Sopenharmony_ci   * ``aix-7.2``          # Legacy form reported in Python 3.8 and earlier
11587db96d56Sopenharmony_ci
11597db96d56Sopenharmony_ci   .. versionchanged:: 3.9
11607db96d56Sopenharmony_ci      The AIX platform string format now also includes the technology level,
11617db96d56Sopenharmony_ci      build date, and ABI bit-size.
11627db96d56Sopenharmony_ci
11637db96d56Sopenharmony_ci
11647db96d56Sopenharmony_ci.. function:: convert_path(pathname)
11657db96d56Sopenharmony_ci
11667db96d56Sopenharmony_ci   Return 'pathname' as a name that will work on the native filesystem, i.e. split
11677db96d56Sopenharmony_ci   it on '/' and put it back together again using the current directory separator.
11687db96d56Sopenharmony_ci   Needed because filenames in the setup script are always supplied in Unix style,
11697db96d56Sopenharmony_ci   and have to be converted to the local convention before we can actually use them
11707db96d56Sopenharmony_ci   in the filesystem.  Raises :exc:`ValueError` on non-Unix-ish systems if
11717db96d56Sopenharmony_ci   *pathname* either  starts or ends with a slash.
11727db96d56Sopenharmony_ci
11737db96d56Sopenharmony_ci
11747db96d56Sopenharmony_ci.. function:: change_root(new_root, pathname)
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci   Return *pathname* with *new_root* prepended.  If *pathname* is relative, this is
11777db96d56Sopenharmony_ci   equivalent to ``os.path.join(new_root,pathname)`` Otherwise, it requires making
11787db96d56Sopenharmony_ci   *pathname* relative and then joining the two, which is tricky on DOS/Windows.
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_ci
11817db96d56Sopenharmony_ci.. function:: check_environ()
11827db96d56Sopenharmony_ci
11837db96d56Sopenharmony_ci   Ensure that 'os.environ' has all the environment variables we guarantee that
11847db96d56Sopenharmony_ci   users can use in config files, command-line options, etc.  Currently this
11857db96d56Sopenharmony_ci   includes:
11867db96d56Sopenharmony_ci
11877db96d56Sopenharmony_ci   * :envvar:`HOME` - user's home directory (Unix only)
11887db96d56Sopenharmony_ci   * :envvar:`PLAT` - description of the current platform, including hardware and
11897db96d56Sopenharmony_ci     OS (see :func:`get_platform`)
11907db96d56Sopenharmony_ci
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci.. function:: subst_vars(s, local_vars)
11937db96d56Sopenharmony_ci
11947db96d56Sopenharmony_ci   Perform shell/Perl-style variable substitution on *s*.  Every occurrence of
11957db96d56Sopenharmony_ci   ``$`` followed by a name is considered a variable, and variable is substituted
11967db96d56Sopenharmony_ci   by the value found in the *local_vars* dictionary, or in ``os.environ`` if it's
11977db96d56Sopenharmony_ci   not in *local_vars*. *os.environ* is first checked/augmented to guarantee that
11987db96d56Sopenharmony_ci   it contains certain values: see :func:`check_environ`.  Raise :exc:`ValueError`
11997db96d56Sopenharmony_ci   for any variables not found in either *local_vars* or ``os.environ``.
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_ci   Note that this is not a full-fledged string interpolation function. A valid
12027db96d56Sopenharmony_ci   ``$variable`` can consist only of upper and lower case letters, numbers and an
12037db96d56Sopenharmony_ci   underscore. No { } or ( ) style quoting is available.
12047db96d56Sopenharmony_ci
12057db96d56Sopenharmony_ci
12067db96d56Sopenharmony_ci.. function:: split_quoted(s)
12077db96d56Sopenharmony_ci
12087db96d56Sopenharmony_ci   Split a string up according to Unix shell-like rules for quotes and backslashes.
12097db96d56Sopenharmony_ci   In short: words are delimited by spaces, as long as those spaces are not escaped
12107db96d56Sopenharmony_ci   by a backslash, or inside a quoted string. Single and double quotes are
12117db96d56Sopenharmony_ci   equivalent, and the quote characters can be backslash-escaped.  The backslash is
12127db96d56Sopenharmony_ci   stripped from any two-character escape sequence, leaving only the escaped
12137db96d56Sopenharmony_ci   character.  The quote characters are stripped from any quoted string.  Returns a
12147db96d56Sopenharmony_ci   list of words.
12157db96d56Sopenharmony_ci
12167db96d56Sopenharmony_ci   .. % Should probably be moved into the standard library.
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_ci.. function:: execute(func, args[, msg=None, verbose=0, dry_run=0])
12207db96d56Sopenharmony_ci
12217db96d56Sopenharmony_ci   Perform some action that affects the outside world (for instance, writing to the
12227db96d56Sopenharmony_ci   filesystem).  Such actions are special because they are disabled by the
12237db96d56Sopenharmony_ci   *dry_run* flag.  This method takes  care of all that bureaucracy for you; all
12247db96d56Sopenharmony_ci   you have to do is supply the function to call and an argument tuple for it (to
12257db96d56Sopenharmony_ci   embody the "external action" being performed), and an optional message to print.
12267db96d56Sopenharmony_ci
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci.. function:: strtobool(val)
12297db96d56Sopenharmony_ci
12307db96d56Sopenharmony_ci   Convert a string representation of truth to true (1) or false (0).
12317db96d56Sopenharmony_ci
12327db96d56Sopenharmony_ci   True values are ``y``, ``yes``, ``t``, ``true``, ``on``  and ``1``; false values
12337db96d56Sopenharmony_ci   are ``n``, ``no``, ``f``, ``false``,  ``off`` and ``0``.  Raises
12347db96d56Sopenharmony_ci   :exc:`ValueError` if *val*  is anything else.
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci.. function:: byte_compile(py_files[, optimize=0, force=0, prefix=None, base_dir=None, verbose=1, dry_run=0, direct=None])
12387db96d56Sopenharmony_ci
12397db96d56Sopenharmony_ci   Byte-compile a collection of Python source files to :file:`.pyc` files in a
12407db96d56Sopenharmony_ci   :file:`__pycache__` subdirectory (see :pep:`3147` and :pep:`488`).
12417db96d56Sopenharmony_ci   *py_files* is a list of files to compile; any files that don't end in
12427db96d56Sopenharmony_ci   :file:`.py` are silently skipped.  *optimize* must be one of the following:
12437db96d56Sopenharmony_ci
12447db96d56Sopenharmony_ci   * ``0`` - don't optimize
12457db96d56Sopenharmony_ci   * ``1`` - normal optimization (like ``python -O``)
12467db96d56Sopenharmony_ci   * ``2`` - extra optimization (like ``python -OO``)
12477db96d56Sopenharmony_ci
12487db96d56Sopenharmony_ci   If *force* is true, all files are recompiled regardless of timestamps.
12497db96d56Sopenharmony_ci
12507db96d56Sopenharmony_ci   The source filename encoded in each :term:`bytecode` file defaults to the filenames
12517db96d56Sopenharmony_ci   listed in *py_files*; you can modify these with *prefix* and *basedir*.
12527db96d56Sopenharmony_ci   *prefix* is a string that will be stripped off of each source filename, and
12537db96d56Sopenharmony_ci   *base_dir* is a directory name that will be prepended (after *prefix* is
12547db96d56Sopenharmony_ci   stripped).  You can supply either or both (or neither) of *prefix* and
12557db96d56Sopenharmony_ci   *base_dir*, as you wish.
12567db96d56Sopenharmony_ci
12577db96d56Sopenharmony_ci   If *dry_run* is true, doesn't actually do anything that would affect the
12587db96d56Sopenharmony_ci   filesystem.
12597db96d56Sopenharmony_ci
12607db96d56Sopenharmony_ci   Byte-compilation is either done directly in this interpreter process with the
12617db96d56Sopenharmony_ci   standard :mod:`py_compile` module, or indirectly by writing a temporary script
12627db96d56Sopenharmony_ci   and executing it.  Normally, you should let :func:`byte_compile` figure out to
12637db96d56Sopenharmony_ci   use direct compilation or not (see the source for details).  The *direct* flag
12647db96d56Sopenharmony_ci   is used by the script generated in indirect mode; unless you know what you're
12657db96d56Sopenharmony_ci   doing, leave it set to ``None``.
12667db96d56Sopenharmony_ci
12677db96d56Sopenharmony_ci   .. versionchanged:: 3.2.3
12687db96d56Sopenharmony_ci      Create ``.pyc`` files with an :func:`import magic tag
12697db96d56Sopenharmony_ci      <imp.get_tag>` in their name, in a :file:`__pycache__` subdirectory
12707db96d56Sopenharmony_ci      instead of files without tag in the current directory.
12717db96d56Sopenharmony_ci
12727db96d56Sopenharmony_ci   .. versionchanged:: 3.5
12737db96d56Sopenharmony_ci      Create ``.pyc`` files according to :pep:`488`.
12747db96d56Sopenharmony_ci
12757db96d56Sopenharmony_ci
12767db96d56Sopenharmony_ci.. function:: rfc822_escape(header)
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ci   Return a version of *header* escaped for inclusion in an :rfc:`822` header, by
12797db96d56Sopenharmony_ci   ensuring there are 8 spaces space after each newline. Note that it does no other
12807db96d56Sopenharmony_ci   modification of the string.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ci   .. % this _can_ be replaced
12837db96d56Sopenharmony_ci
12847db96d56Sopenharmony_ci.. % \subsection{Distutils objects}
12857db96d56Sopenharmony_ci
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ci:mod:`distutils.dist` --- The Distribution class
12887db96d56Sopenharmony_ci================================================
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci.. module:: distutils.dist
12917db96d56Sopenharmony_ci   :synopsis: Provides the Distribution class, which represents the module distribution being
12927db96d56Sopenharmony_ci              built/installed/distributed
12937db96d56Sopenharmony_ci
12947db96d56Sopenharmony_ci
12957db96d56Sopenharmony_ciThis module provides the :class:`~distutils.core.Distribution` class, which
12967db96d56Sopenharmony_cirepresents the module distribution being built/installed/distributed.
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ci
12997db96d56Sopenharmony_ci:mod:`distutils.extension` --- The Extension class
13007db96d56Sopenharmony_ci==================================================
13017db96d56Sopenharmony_ci
13027db96d56Sopenharmony_ci.. module:: distutils.extension
13037db96d56Sopenharmony_ci   :synopsis: Provides the Extension class, used to describe C/C++ extension modules in setup
13047db96d56Sopenharmony_ci              scripts
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_ci
13077db96d56Sopenharmony_ciThis module provides the :class:`Extension` class, used to describe C/C++
13087db96d56Sopenharmony_ciextension modules in setup scripts.
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci.. % \subsection{Ungrouped modules}
13117db96d56Sopenharmony_ci.. % The following haven't been moved into a more appropriate section yet.
13127db96d56Sopenharmony_ci
13137db96d56Sopenharmony_ci
13147db96d56Sopenharmony_ci:mod:`distutils.debug` --- Distutils debug mode
13157db96d56Sopenharmony_ci===============================================
13167db96d56Sopenharmony_ci
13177db96d56Sopenharmony_ci.. module:: distutils.debug
13187db96d56Sopenharmony_ci   :synopsis: Provides the debug flag for distutils
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ciThis module provides the DEBUG flag.
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_ci
13247db96d56Sopenharmony_ci:mod:`distutils.errors` --- Distutils exceptions
13257db96d56Sopenharmony_ci================================================
13267db96d56Sopenharmony_ci
13277db96d56Sopenharmony_ci.. module:: distutils.errors
13287db96d56Sopenharmony_ci   :synopsis: Provides standard distutils exceptions
13297db96d56Sopenharmony_ci
13307db96d56Sopenharmony_ci
13317db96d56Sopenharmony_ciProvides exceptions used by the Distutils modules.  Note that Distutils modules
13327db96d56Sopenharmony_cimay raise standard exceptions; in particular, SystemExit is usually raised for
13337db96d56Sopenharmony_cierrors that are obviously the end-user's fault (eg. bad command-line arguments).
13347db96d56Sopenharmony_ci
13357db96d56Sopenharmony_ciThis module is safe to use in ``from ... import *`` mode; it only exports
13367db96d56Sopenharmony_cisymbols whose names start with ``Distutils`` and end with ``Error``.
13377db96d56Sopenharmony_ci
13387db96d56Sopenharmony_ci
13397db96d56Sopenharmony_ci:mod:`distutils.fancy_getopt` --- Wrapper around the standard getopt module
13407db96d56Sopenharmony_ci===========================================================================
13417db96d56Sopenharmony_ci
13427db96d56Sopenharmony_ci.. module:: distutils.fancy_getopt
13437db96d56Sopenharmony_ci   :synopsis: Additional getopt functionality
13447db96d56Sopenharmony_ci
13457db96d56Sopenharmony_ci
13467db96d56Sopenharmony_ciThis module provides a wrapper around the standard :mod:`getopt`  module that
13477db96d56Sopenharmony_ciprovides the following additional features:
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ci* short and long options are tied together
13507db96d56Sopenharmony_ci
13517db96d56Sopenharmony_ci* options have help strings, so :func:`fancy_getopt` could potentially  create a
13527db96d56Sopenharmony_ci  complete usage summary
13537db96d56Sopenharmony_ci
13547db96d56Sopenharmony_ci* options set attributes of a passed-in object
13557db96d56Sopenharmony_ci
13567db96d56Sopenharmony_ci* boolean options can have "negative aliases" --- eg. if :option:`!--quiet` is
13577db96d56Sopenharmony_ci  the "negative alias" of :option:`!--verbose`, then :option:`!--quiet` on the
13587db96d56Sopenharmony_ci  command line sets *verbose* to false.
13597db96d56Sopenharmony_ci
13607db96d56Sopenharmony_ci.. function:: fancy_getopt(options, negative_opt, object, args)
13617db96d56Sopenharmony_ci
13627db96d56Sopenharmony_ci   Wrapper function. *options* is a list of ``(long_option, short_option,
13637db96d56Sopenharmony_ci   help_string)`` 3-tuples as described in the constructor for
13647db96d56Sopenharmony_ci   :class:`FancyGetopt`. *negative_opt* should be a dictionary mapping option names
13657db96d56Sopenharmony_ci   to option names, both the key and value should be in the *options* list.
13667db96d56Sopenharmony_ci   *object* is an object which will be used to store values (see the :meth:`getopt`
13677db96d56Sopenharmony_ci   method of the :class:`FancyGetopt` class). *args* is the argument list. Will use
13687db96d56Sopenharmony_ci   ``sys.argv[1:]`` if you  pass ``None`` as *args*.
13697db96d56Sopenharmony_ci
13707db96d56Sopenharmony_ci
13717db96d56Sopenharmony_ci.. function:: wrap_text(text, width)
13727db96d56Sopenharmony_ci
13737db96d56Sopenharmony_ci   Wraps *text* to less than *width* wide.
13747db96d56Sopenharmony_ci
13757db96d56Sopenharmony_ci
13767db96d56Sopenharmony_ci.. class:: FancyGetopt([option_table=None])
13777db96d56Sopenharmony_ci
13787db96d56Sopenharmony_ci   The option_table is a list of 3-tuples: ``(long_option, short_option,
13797db96d56Sopenharmony_ci   help_string)``
13807db96d56Sopenharmony_ci
13817db96d56Sopenharmony_ci   If an option takes an argument, its *long_option* should have ``'='`` appended;
13827db96d56Sopenharmony_ci   *short_option* should just be a single character, no ``':'`` in any case.
13837db96d56Sopenharmony_ci   *short_option* should be ``None`` if a *long_option*  doesn't have a
13847db96d56Sopenharmony_ci   corresponding *short_option*. All option tuples must have long options.
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ciThe :class:`FancyGetopt` class provides the following methods:
13877db96d56Sopenharmony_ci
13887db96d56Sopenharmony_ci
13897db96d56Sopenharmony_ci.. method:: FancyGetopt.getopt([args=None, object=None])
13907db96d56Sopenharmony_ci
13917db96d56Sopenharmony_ci   Parse command-line options in args. Store as attributes on *object*.
13927db96d56Sopenharmony_ci
13937db96d56Sopenharmony_ci   If *args* is ``None`` or not supplied, uses ``sys.argv[1:]``.  If *object* is
13947db96d56Sopenharmony_ci   ``None`` or not supplied, creates a new :class:`OptionDummy` instance, stores
13957db96d56Sopenharmony_ci   option values there, and returns a tuple ``(args, object)``.  If *object* is
13967db96d56Sopenharmony_ci   supplied, it is modified in place and :func:`getopt` just returns *args*; in
13977db96d56Sopenharmony_ci   both cases, the returned *args* is a modified copy of the passed-in *args* list,
13987db96d56Sopenharmony_ci   which is left untouched.
13997db96d56Sopenharmony_ci
14007db96d56Sopenharmony_ci   .. % and args returned are?
14017db96d56Sopenharmony_ci
14027db96d56Sopenharmony_ci
14037db96d56Sopenharmony_ci.. method:: FancyGetopt.get_option_order()
14047db96d56Sopenharmony_ci
14057db96d56Sopenharmony_ci   Returns the list of ``(option, value)`` tuples processed by the previous run of
14067db96d56Sopenharmony_ci   :meth:`getopt`  Raises :exc:`RuntimeError` if :meth:`getopt` hasn't been called
14077db96d56Sopenharmony_ci   yet.
14087db96d56Sopenharmony_ci
14097db96d56Sopenharmony_ci
14107db96d56Sopenharmony_ci.. method:: FancyGetopt.generate_help([header=None])
14117db96d56Sopenharmony_ci
14127db96d56Sopenharmony_ci   Generate help text (a list of strings, one per suggested line of output) from
14137db96d56Sopenharmony_ci   the option table for this :class:`FancyGetopt` object.
14147db96d56Sopenharmony_ci
14157db96d56Sopenharmony_ci   If supplied, prints the supplied *header* at the top of the help.
14167db96d56Sopenharmony_ci
14177db96d56Sopenharmony_ci
14187db96d56Sopenharmony_ci:mod:`distutils.filelist` --- The FileList class
14197db96d56Sopenharmony_ci================================================
14207db96d56Sopenharmony_ci
14217db96d56Sopenharmony_ci.. module:: distutils.filelist
14227db96d56Sopenharmony_ci   :synopsis: The FileList class, used for poking about the file system and
14237db96d56Sopenharmony_ci              building lists of files.
14247db96d56Sopenharmony_ci
14257db96d56Sopenharmony_ci
14267db96d56Sopenharmony_ciThis module provides the :class:`FileList` class, used for poking about the
14277db96d56Sopenharmony_cifilesystem and building lists of files.
14287db96d56Sopenharmony_ci
14297db96d56Sopenharmony_ci
14307db96d56Sopenharmony_ci:mod:`distutils.log` --- Simple :pep:`282`-style logging
14317db96d56Sopenharmony_ci========================================================
14327db96d56Sopenharmony_ci
14337db96d56Sopenharmony_ci.. module:: distutils.log
14347db96d56Sopenharmony_ci   :synopsis: A simple logging mechanism, :pep:`282`-style
14357db96d56Sopenharmony_ci
14367db96d56Sopenharmony_ci
14377db96d56Sopenharmony_ci:mod:`distutils.spawn` --- Spawn a sub-process
14387db96d56Sopenharmony_ci==============================================
14397db96d56Sopenharmony_ci
14407db96d56Sopenharmony_ci.. module:: distutils.spawn
14417db96d56Sopenharmony_ci   :synopsis: Provides the spawn() function
14427db96d56Sopenharmony_ci
14437db96d56Sopenharmony_ci
14447db96d56Sopenharmony_ciThis module provides the :func:`spawn` function, a front-end to  various
14457db96d56Sopenharmony_ciplatform-specific functions for launching another program in a  sub-process.
14467db96d56Sopenharmony_ciAlso provides :func:`find_executable` to search the path for a given executable
14477db96d56Sopenharmony_ciname.
14487db96d56Sopenharmony_ci
14497db96d56Sopenharmony_ci
14507db96d56Sopenharmony_ci:mod:`distutils.sysconfig` --- System configuration information
14517db96d56Sopenharmony_ci===============================================================
14527db96d56Sopenharmony_ci
14537db96d56Sopenharmony_ci.. module:: distutils.sysconfig
14547db96d56Sopenharmony_ci   :synopsis: Low-level access to configuration information of the Python interpreter.
14557db96d56Sopenharmony_ci.. deprecated:: 3.10
14567db96d56Sopenharmony_ci   :mod:`distutils.sysconfig` has been merged into :mod:`sysconfig`.
14577db96d56Sopenharmony_ci.. moduleauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
14587db96d56Sopenharmony_ci.. moduleauthor:: Greg Ward <gward@python.net>
14597db96d56Sopenharmony_ci.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
14607db96d56Sopenharmony_ci
14617db96d56Sopenharmony_ci
14627db96d56Sopenharmony_ciThe :mod:`distutils.sysconfig` module provides access to Python's low-level
14637db96d56Sopenharmony_ciconfiguration information.  The specific configuration variables available
14647db96d56Sopenharmony_cidepend heavily on the platform and configuration. The specific variables depend
14657db96d56Sopenharmony_cion the build process for the specific version of Python being run; the variables
14667db96d56Sopenharmony_ciare those found in the :file:`Makefile` and configuration header that are
14677db96d56Sopenharmony_ciinstalled with Python on Unix systems.  The configuration header is called
14687db96d56Sopenharmony_ci:file:`pyconfig.h` for Python versions starting with 2.2, and :file:`config.h`
14697db96d56Sopenharmony_cifor earlier versions of Python.
14707db96d56Sopenharmony_ci
14717db96d56Sopenharmony_ciSome additional functions are provided which perform some useful manipulations
14727db96d56Sopenharmony_cifor other parts of the :mod:`distutils` package.
14737db96d56Sopenharmony_ci
14747db96d56Sopenharmony_ci
14757db96d56Sopenharmony_ci.. data:: PREFIX
14767db96d56Sopenharmony_ci
14777db96d56Sopenharmony_ci   The result of ``os.path.normpath(sys.prefix)``.
14787db96d56Sopenharmony_ci
14797db96d56Sopenharmony_ci
14807db96d56Sopenharmony_ci.. data:: EXEC_PREFIX
14817db96d56Sopenharmony_ci
14827db96d56Sopenharmony_ci   The result of ``os.path.normpath(sys.exec_prefix)``.
14837db96d56Sopenharmony_ci
14847db96d56Sopenharmony_ci
14857db96d56Sopenharmony_ci.. function:: get_config_var(name)
14867db96d56Sopenharmony_ci
14877db96d56Sopenharmony_ci   Return the value of a single variable.  This is equivalent to
14887db96d56Sopenharmony_ci   ``get_config_vars().get(name)``.
14897db96d56Sopenharmony_ci
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci.. function:: get_config_vars(...)
14927db96d56Sopenharmony_ci
14937db96d56Sopenharmony_ci   Return a set of variable definitions.  If there are no arguments, this returns a
14947db96d56Sopenharmony_ci   dictionary mapping names of configuration variables to values.  If arguments are
14957db96d56Sopenharmony_ci   provided, they should be strings, and the return value will be a sequence giving
14967db96d56Sopenharmony_ci   the associated values. If a given name does not have a corresponding value,
14977db96d56Sopenharmony_ci   ``None`` will be included for that variable.
14987db96d56Sopenharmony_ci
14997db96d56Sopenharmony_ci
15007db96d56Sopenharmony_ci.. function:: get_config_h_filename()
15017db96d56Sopenharmony_ci
15027db96d56Sopenharmony_ci   Return the full path name of the configuration header.  For Unix, this will be
15037db96d56Sopenharmony_ci   the header generated by the :program:`configure` script; for other platforms the
15047db96d56Sopenharmony_ci   header will have been supplied directly by the Python source distribution.  The
15057db96d56Sopenharmony_ci   file is a platform-specific text file.
15067db96d56Sopenharmony_ci
15077db96d56Sopenharmony_ci
15087db96d56Sopenharmony_ci.. function:: get_makefile_filename()
15097db96d56Sopenharmony_ci
15107db96d56Sopenharmony_ci   Return the full path name of the :file:`Makefile` used to build Python.  For
15117db96d56Sopenharmony_ci   Unix, this will be a file generated by the :program:`configure` script; the
15127db96d56Sopenharmony_ci   meaning for other platforms will vary.  The file is a platform-specific text
15137db96d56Sopenharmony_ci   file, if it exists. This function is only useful on POSIX platforms.
15147db96d56Sopenharmony_ci
15157db96d56Sopenharmony_ciThe following functions are deprecated together with this module and they
15167db96d56Sopenharmony_cihave no direct replacement.
15177db96d56Sopenharmony_ci
15187db96d56Sopenharmony_ci
15197db96d56Sopenharmony_ci.. function:: get_python_inc([plat_specific[, prefix]])
15207db96d56Sopenharmony_ci
15217db96d56Sopenharmony_ci   Return the directory for either the general or platform-dependent C include
15227db96d56Sopenharmony_ci   files.  If *plat_specific* is true, the platform-dependent include directory is
15237db96d56Sopenharmony_ci   returned; if false or omitted, the platform-independent directory is returned.
15247db96d56Sopenharmony_ci   If *prefix* is given, it is used as either the prefix instead of
15257db96d56Sopenharmony_ci   :const:`PREFIX`, or as the exec-prefix instead of :const:`EXEC_PREFIX` if
15267db96d56Sopenharmony_ci   *plat_specific* is true.
15277db96d56Sopenharmony_ci
15287db96d56Sopenharmony_ci
15297db96d56Sopenharmony_ci.. function:: get_python_lib([plat_specific[, standard_lib[, prefix]]])
15307db96d56Sopenharmony_ci
15317db96d56Sopenharmony_ci   Return the directory for either the general or platform-dependent library
15327db96d56Sopenharmony_ci   installation.  If *plat_specific* is true, the platform-dependent include
15337db96d56Sopenharmony_ci   directory is returned; if false or omitted, the platform-independent directory
15347db96d56Sopenharmony_ci   is returned.  If *prefix* is given, it is used as either the prefix instead of
15357db96d56Sopenharmony_ci   :const:`PREFIX`, or as the exec-prefix instead of :const:`EXEC_PREFIX` if
15367db96d56Sopenharmony_ci   *plat_specific* is true.  If *standard_lib* is true, the directory for the
15377db96d56Sopenharmony_ci   standard library is returned rather than the directory for the installation of
15387db96d56Sopenharmony_ci   third-party extensions.
15397db96d56Sopenharmony_ci
15407db96d56Sopenharmony_ciThe following function is only intended for use within the :mod:`distutils`
15417db96d56Sopenharmony_cipackage.
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci
15447db96d56Sopenharmony_ci.. function:: customize_compiler(compiler)
15457db96d56Sopenharmony_ci
15467db96d56Sopenharmony_ci   Do any platform-specific customization of a
15477db96d56Sopenharmony_ci   :class:`distutils.ccompiler.CCompiler` instance.
15487db96d56Sopenharmony_ci
15497db96d56Sopenharmony_ci   This function is only needed on Unix at this time, but should be called
15507db96d56Sopenharmony_ci   consistently to support forward-compatibility.  It inserts the information that
15517db96d56Sopenharmony_ci   varies across Unix flavors and is stored in Python's :file:`Makefile`.  This
15527db96d56Sopenharmony_ci   information includes the selected compiler, compiler and linker options, and the
15537db96d56Sopenharmony_ci   extension used by the linker for shared objects.
15547db96d56Sopenharmony_ci
15557db96d56Sopenharmony_ciThis function is even more special-purpose, and should only be used from
15567db96d56Sopenharmony_ciPython's own build procedures.
15577db96d56Sopenharmony_ci
15587db96d56Sopenharmony_ci
15597db96d56Sopenharmony_ci.. function:: set_python_build()
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ci   Inform the :mod:`distutils.sysconfig` module that it is being used as part of
15627db96d56Sopenharmony_ci   the build process for Python.  This changes a lot of relative locations for
15637db96d56Sopenharmony_ci   files, allowing them to be located in the build area rather than in an installed
15647db96d56Sopenharmony_ci   Python.
15657db96d56Sopenharmony_ci
15667db96d56Sopenharmony_ci
15677db96d56Sopenharmony_ci:mod:`distutils.text_file` --- The TextFile class
15687db96d56Sopenharmony_ci=================================================
15697db96d56Sopenharmony_ci
15707db96d56Sopenharmony_ci.. module:: distutils.text_file
15717db96d56Sopenharmony_ci   :synopsis: Provides the TextFile class, a simple interface to text files
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci
15747db96d56Sopenharmony_ciThis module provides the :class:`TextFile` class, which gives an interface  to
15757db96d56Sopenharmony_citext files that (optionally) takes care of stripping comments, ignoring  blank
15767db96d56Sopenharmony_cilines, and joining lines with backslashes.
15777db96d56Sopenharmony_ci
15787db96d56Sopenharmony_ci
15797db96d56Sopenharmony_ci.. class:: TextFile([filename=None, file=None, **options])
15807db96d56Sopenharmony_ci
15817db96d56Sopenharmony_ci   This class provides a file-like object that takes care of all  the things you
15827db96d56Sopenharmony_ci   commonly want to do when processing a text file  that has some line-by-line
15837db96d56Sopenharmony_ci   syntax: strip comments (as long as ``#``  is your comment character), skip blank
15847db96d56Sopenharmony_ci   lines, join adjacent lines by escaping the newline (ie. backslash at end of
15857db96d56Sopenharmony_ci   line), strip leading and/or trailing whitespace.  All of these are optional and
15867db96d56Sopenharmony_ci   independently controllable.
15877db96d56Sopenharmony_ci
15887db96d56Sopenharmony_ci   The class provides a :meth:`warn` method so you can generate  warning messages
15897db96d56Sopenharmony_ci   that report physical line number, even if the  logical line in question spans
15907db96d56Sopenharmony_ci   multiple physical lines.  Also  provides :meth:`unreadline` for implementing
15917db96d56Sopenharmony_ci   line-at-a-time lookahead.
15927db96d56Sopenharmony_ci
15937db96d56Sopenharmony_ci   :class:`TextFile` instances are create with either *filename*, *file*, or both.
15947db96d56Sopenharmony_ci   :exc:`RuntimeError` is raised if both are ``None``. *filename* should be a
15957db96d56Sopenharmony_ci   string, and *file* a file object (or something that provides :meth:`readline`
15967db96d56Sopenharmony_ci   and :meth:`close`  methods).  It is recommended that you supply at least
15977db96d56Sopenharmony_ci   *filename*,  so that :class:`TextFile` can include it in warning messages.  If
15987db96d56Sopenharmony_ci   *file* is not supplied, :class:`TextFile` creates its own using the
15997db96d56Sopenharmony_ci   :func:`open` built-in function.
16007db96d56Sopenharmony_ci
16017db96d56Sopenharmony_ci   The options are all boolean, and affect the values returned by :meth:`readline`
16027db96d56Sopenharmony_ci
16037db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|l|
16047db96d56Sopenharmony_ci
16057db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16067db96d56Sopenharmony_ci   | option name      | description                    | default |
16077db96d56Sopenharmony_ci   +==================+================================+=========+
16087db96d56Sopenharmony_ci   | *strip_comments* | strip from ``'#'`` to          | true    |
16097db96d56Sopenharmony_ci   |                  | end-of-line, as well as any    |         |
16107db96d56Sopenharmony_ci   |                  | whitespace leading up to the   |         |
16117db96d56Sopenharmony_ci   |                  | ``'#'``\ ---unless it is       |         |
16127db96d56Sopenharmony_ci   |                  | escaped by a backslash         |         |
16137db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16147db96d56Sopenharmony_ci   | *lstrip_ws*      | strip leading whitespace from  | false   |
16157db96d56Sopenharmony_ci   |                  | each line before returning it  |         |
16167db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16177db96d56Sopenharmony_ci   | *rstrip_ws*      | strip trailing whitespace      | true    |
16187db96d56Sopenharmony_ci   |                  | (including line terminator!)   |         |
16197db96d56Sopenharmony_ci   |                  | from each line before          |         |
16207db96d56Sopenharmony_ci   |                  | returning it.                  |         |
16217db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16227db96d56Sopenharmony_ci   | *skip_blanks*    | skip lines that are empty      | true    |
16237db96d56Sopenharmony_ci   |                  | \*after\* stripping comments   |         |
16247db96d56Sopenharmony_ci   |                  | and whitespace.  (If both      |         |
16257db96d56Sopenharmony_ci   |                  | lstrip_ws and rstrip_ws are    |         |
16267db96d56Sopenharmony_ci   |                  | false, then some lines may     |         |
16277db96d56Sopenharmony_ci   |                  | consist of solely whitespace:  |         |
16287db96d56Sopenharmony_ci   |                  | these will \*not\* be skipped, |         |
16297db96d56Sopenharmony_ci   |                  | even if *skip_blanks* is       |         |
16307db96d56Sopenharmony_ci   |                  | true.)                         |         |
16317db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16327db96d56Sopenharmony_ci   | *join_lines*     | if a backslash is the last     | false   |
16337db96d56Sopenharmony_ci   |                  | non-newline character on a     |         |
16347db96d56Sopenharmony_ci   |                  | line after stripping comments  |         |
16357db96d56Sopenharmony_ci   |                  | and whitespace, join the       |         |
16367db96d56Sopenharmony_ci   |                  | following line to it to form   |         |
16377db96d56Sopenharmony_ci   |                  | one logical line; if N         |         |
16387db96d56Sopenharmony_ci   |                  | consecutive lines end with a   |         |
16397db96d56Sopenharmony_ci   |                  | backslash, then N+1 physical   |         |
16407db96d56Sopenharmony_ci   |                  | lines will be joined to form   |         |
16417db96d56Sopenharmony_ci   |                  | one logical line.              |         |
16427db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16437db96d56Sopenharmony_ci   | *collapse_join*  | strip leading whitespace from  | false   |
16447db96d56Sopenharmony_ci   |                  | lines that are joined to their |         |
16457db96d56Sopenharmony_ci   |                  | predecessor; only matters if   |         |
16467db96d56Sopenharmony_ci   |                  | ``(join_lines and not          |         |
16477db96d56Sopenharmony_ci   |                  | lstrip_ws)``                   |         |
16487db96d56Sopenharmony_ci   +------------------+--------------------------------+---------+
16497db96d56Sopenharmony_ci
16507db96d56Sopenharmony_ci   Note that since *rstrip_ws* can strip the trailing newline, the semantics of
16517db96d56Sopenharmony_ci   :meth:`readline` must differ from those of the built-in file object's
16527db96d56Sopenharmony_ci   :meth:`readline` method!  In particular, :meth:`readline`  returns ``None`` for
16537db96d56Sopenharmony_ci   end-of-file: an empty string might just be a  blank line (or an all-whitespace
16547db96d56Sopenharmony_ci   line), if *rstrip_ws* is true  but *skip_blanks* is not.
16557db96d56Sopenharmony_ci
16567db96d56Sopenharmony_ci
16577db96d56Sopenharmony_ci   .. method:: TextFile.open(filename)
16587db96d56Sopenharmony_ci
16597db96d56Sopenharmony_ci      Open a new file *filename*.  This overrides any *file* or *filename*
16607db96d56Sopenharmony_ci      constructor arguments.
16617db96d56Sopenharmony_ci
16627db96d56Sopenharmony_ci
16637db96d56Sopenharmony_ci   .. method:: TextFile.close()
16647db96d56Sopenharmony_ci
16657db96d56Sopenharmony_ci      Close the current file and forget everything we know about it (including the
16667db96d56Sopenharmony_ci      filename and the current line number).
16677db96d56Sopenharmony_ci
16687db96d56Sopenharmony_ci
16697db96d56Sopenharmony_ci   .. method:: TextFile.warn(msg[,line=None])
16707db96d56Sopenharmony_ci
16717db96d56Sopenharmony_ci      Print (to stderr) a warning message tied to the current logical line in the
16727db96d56Sopenharmony_ci      current file.  If the current logical line in the file spans multiple physical
16737db96d56Sopenharmony_ci      lines, the warning refers to the whole range, such as ``"lines 3-5"``.  If
16747db96d56Sopenharmony_ci      *line* is supplied,  it overrides the current line number; it may be a list or
16757db96d56Sopenharmony_ci      tuple  to indicate a range of physical lines, or an integer for a  single
16767db96d56Sopenharmony_ci      physical line.
16777db96d56Sopenharmony_ci
16787db96d56Sopenharmony_ci
16797db96d56Sopenharmony_ci   .. method:: TextFile.readline()
16807db96d56Sopenharmony_ci
16817db96d56Sopenharmony_ci      Read and return a single logical line from the current file (or from an internal
16827db96d56Sopenharmony_ci      buffer if lines have previously been "unread" with :meth:`unreadline`).  If the
16837db96d56Sopenharmony_ci      *join_lines* option  is true, this may involve reading multiple physical lines
16847db96d56Sopenharmony_ci      concatenated into a single string.  Updates the current line number,  so calling
16857db96d56Sopenharmony_ci      :meth:`warn` after :meth:`readline` emits a warning  about the physical line(s)
16867db96d56Sopenharmony_ci      just read.  Returns ``None`` on end-of-file,  since the empty string can occur
16877db96d56Sopenharmony_ci      if *rstrip_ws* is true but  *strip_blanks* is not.
16887db96d56Sopenharmony_ci
16897db96d56Sopenharmony_ci
16907db96d56Sopenharmony_ci   .. method:: TextFile.readlines()
16917db96d56Sopenharmony_ci
16927db96d56Sopenharmony_ci      Read and return the list of all logical lines remaining in the current file.
16937db96d56Sopenharmony_ci      This updates the current line number to the last line of the file.
16947db96d56Sopenharmony_ci
16957db96d56Sopenharmony_ci
16967db96d56Sopenharmony_ci   .. method:: TextFile.unreadline(line)
16977db96d56Sopenharmony_ci
16987db96d56Sopenharmony_ci      Push *line* (a string) onto an internal buffer that will be checked by future
16997db96d56Sopenharmony_ci      :meth:`readline` calls.  Handy for implementing a parser with line-at-a-time
17007db96d56Sopenharmony_ci      lookahead. Note that lines that are "unread" with :meth:`unreadline` are not
17017db96d56Sopenharmony_ci      subsequently re-cleansed (whitespace  stripped, or whatever) when read with
17027db96d56Sopenharmony_ci      :meth:`readline`. If multiple calls are made to :meth:`unreadline` before a call
17037db96d56Sopenharmony_ci      to :meth:`readline`, the lines will be returned most in most recent first order.
17047db96d56Sopenharmony_ci
17057db96d56Sopenharmony_ci
17067db96d56Sopenharmony_ci:mod:`distutils.version` --- Version number classes
17077db96d56Sopenharmony_ci===================================================
17087db96d56Sopenharmony_ci
17097db96d56Sopenharmony_ci.. module:: distutils.version
17107db96d56Sopenharmony_ci   :synopsis: Implements classes that represent module version numbers.
17117db96d56Sopenharmony_ci
17127db96d56Sopenharmony_ci
17137db96d56Sopenharmony_ci.. % todo
17147db96d56Sopenharmony_ci.. % \section{Distutils Commands}
17157db96d56Sopenharmony_ci.. %
17167db96d56Sopenharmony_ci.. % This part of Distutils implements the various Distutils commands, such
17177db96d56Sopenharmony_ci.. % as \code{build}, \code{install} \&c. Each command is implemented as a
17187db96d56Sopenharmony_ci.. % separate module, with the command name as the name of the module.
17197db96d56Sopenharmony_ci
17207db96d56Sopenharmony_ci
17217db96d56Sopenharmony_ci:mod:`distutils.cmd` --- Abstract base class for Distutils commands
17227db96d56Sopenharmony_ci===================================================================
17237db96d56Sopenharmony_ci
17247db96d56Sopenharmony_ci.. module:: distutils.cmd
17257db96d56Sopenharmony_ci   :synopsis: Provides the abstract base class :class:`~distutils.cmd.Command`. This class
17267db96d56Sopenharmony_ci              is subclassed by the modules in the distutils.command subpackage.
17277db96d56Sopenharmony_ci
17287db96d56Sopenharmony_ci
17297db96d56Sopenharmony_ciThis module supplies the abstract base class :class:`Command`.
17307db96d56Sopenharmony_ci
17317db96d56Sopenharmony_ci
17327db96d56Sopenharmony_ci.. class:: Command(dist)
17337db96d56Sopenharmony_ci
17347db96d56Sopenharmony_ci   Abstract base class for defining command classes, the "worker bees" of the
17357db96d56Sopenharmony_ci   Distutils.  A useful analogy for command classes is to think of them as
17367db96d56Sopenharmony_ci   subroutines with local variables called *options*.  The options are declared
17377db96d56Sopenharmony_ci   in :meth:`initialize_options` and defined (given their final values) in
17387db96d56Sopenharmony_ci   :meth:`finalize_options`, both of which must be defined by every command
17397db96d56Sopenharmony_ci   class.  The distinction between the two is necessary because option values
17407db96d56Sopenharmony_ci   might come from the outside world (command line, config file, ...), and any
17417db96d56Sopenharmony_ci   options dependent on other options must be computed after these outside
17427db96d56Sopenharmony_ci   influences have been processed --- hence :meth:`finalize_options`.  The body
17437db96d56Sopenharmony_ci   of the subroutine, where it does all its work based on the values of its
17447db96d56Sopenharmony_ci   options, is the :meth:`run` method, which must also be implemented by every
17457db96d56Sopenharmony_ci   command class.
17467db96d56Sopenharmony_ci
17477db96d56Sopenharmony_ci   The class constructor takes a single argument *dist*, a
17487db96d56Sopenharmony_ci   :class:`~distutils.core.Distribution` instance.
17497db96d56Sopenharmony_ci
17507db96d56Sopenharmony_ci
17517db96d56Sopenharmony_ciCreating a new Distutils command
17527db96d56Sopenharmony_ci================================
17537db96d56Sopenharmony_ci
17547db96d56Sopenharmony_ciThis section outlines the steps to create a new Distutils command.
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ciA new command lives in a module in the :mod:`distutils.command` package. There
17577db96d56Sopenharmony_ciis a sample template in that directory called :file:`command_template`.  Copy
17587db96d56Sopenharmony_cithis file to a new module with the same name as the new command you're
17597db96d56Sopenharmony_ciimplementing.  This module should implement a class with the same name as the
17607db96d56Sopenharmony_cimodule (and the command).  So, for instance, to create the command
17617db96d56Sopenharmony_ci``peel_banana`` (so that users can run ``setup.py peel_banana``), you'd copy
17627db96d56Sopenharmony_ci:file:`command_template` to :file:`distutils/command/peel_banana.py`, then edit
17637db96d56Sopenharmony_ciit so that it's implementing the class :class:`peel_banana`, a subclass of
17647db96d56Sopenharmony_ci:class:`distutils.cmd.Command`.
17657db96d56Sopenharmony_ci
17667db96d56Sopenharmony_ciSubclasses of :class:`Command` must define the following methods.
17677db96d56Sopenharmony_ci
17687db96d56Sopenharmony_ci.. method:: Command.initialize_options()
17697db96d56Sopenharmony_ci
17707db96d56Sopenharmony_ci   Set default values for all the options that this command supports.  Note that
17717db96d56Sopenharmony_ci   these defaults may be overridden by other commands, by the setup script, by
17727db96d56Sopenharmony_ci   config files, or by the command-line.  Thus, this is not the place to code
17737db96d56Sopenharmony_ci   dependencies between options; generally, :meth:`initialize_options`
17747db96d56Sopenharmony_ci   implementations are just a bunch of ``self.foo = None`` assignments.
17757db96d56Sopenharmony_ci
17767db96d56Sopenharmony_ci
17777db96d56Sopenharmony_ci.. method:: Command.finalize_options()
17787db96d56Sopenharmony_ci
17797db96d56Sopenharmony_ci   Set final values for all the options that this command supports. This is
17807db96d56Sopenharmony_ci   always called as late as possible, ie.  after any option assignments from the
17817db96d56Sopenharmony_ci   command-line or from other commands have been done.  Thus, this is the place
17827db96d56Sopenharmony_ci   to code option dependencies: if *foo* depends on *bar*, then it is safe to
17837db96d56Sopenharmony_ci   set *foo* from *bar* as long as *foo* still has the same value it was
17847db96d56Sopenharmony_ci   assigned in :meth:`initialize_options`.
17857db96d56Sopenharmony_ci
17867db96d56Sopenharmony_ci
17877db96d56Sopenharmony_ci.. method:: Command.run()
17887db96d56Sopenharmony_ci
17897db96d56Sopenharmony_ci   A command's raison d'etre: carry out the action it exists to perform, controlled
17907db96d56Sopenharmony_ci   by the options initialized in :meth:`initialize_options`, customized by other
17917db96d56Sopenharmony_ci   commands, the setup script, the command-line, and config files, and finalized in
17927db96d56Sopenharmony_ci   :meth:`finalize_options`.  All terminal output and filesystem interaction should
17937db96d56Sopenharmony_ci   be done by :meth:`run`.
17947db96d56Sopenharmony_ci
17957db96d56Sopenharmony_ci
17967db96d56Sopenharmony_ci.. attribute:: Command.sub_commands
17977db96d56Sopenharmony_ci
17987db96d56Sopenharmony_ci   *sub_commands* formalizes the notion of a "family" of commands,
17997db96d56Sopenharmony_ci   e.g. ``install`` as the parent with sub-commands ``install_lib``,
18007db96d56Sopenharmony_ci   ``install_headers``, etc.  The parent of a family of commands defines
18017db96d56Sopenharmony_ci   *sub_commands* as a class attribute; it's a list of 2-tuples ``(command_name,
18027db96d56Sopenharmony_ci   predicate)``, with *command_name* a string and *predicate* a function, a
18037db96d56Sopenharmony_ci   string or ``None``.  *predicate* is a method of the parent command that
18047db96d56Sopenharmony_ci   determines whether the corresponding command is applicable in the current
18057db96d56Sopenharmony_ci   situation.  (E.g. ``install_headers`` is only applicable if we have any C
18067db96d56Sopenharmony_ci   header files to install.)  If *predicate* is ``None``, that command is always
18077db96d56Sopenharmony_ci   applicable.
18087db96d56Sopenharmony_ci
18097db96d56Sopenharmony_ci   *sub_commands* is usually defined at the *end* of a class, because
18107db96d56Sopenharmony_ci   predicates can be methods of the class, so they must already have been
18117db96d56Sopenharmony_ci   defined.  The canonical example is the :command:`install` command.
18127db96d56Sopenharmony_ci
18137db96d56Sopenharmony_ci
18147db96d56Sopenharmony_ci:mod:`distutils.command` --- Individual Distutils commands
18157db96d56Sopenharmony_ci==========================================================
18167db96d56Sopenharmony_ci
18177db96d56Sopenharmony_ci.. module:: distutils.command
18187db96d56Sopenharmony_ci   :synopsis: Contains one module for each standard Distutils command.
18197db96d56Sopenharmony_ci
18207db96d56Sopenharmony_ci
18217db96d56Sopenharmony_ci.. % \subsubsection{Individual Distutils commands}
18227db96d56Sopenharmony_ci.. % todo
18237db96d56Sopenharmony_ci
18247db96d56Sopenharmony_ci
18257db96d56Sopenharmony_ci:mod:`distutils.command.bdist` --- Build a binary installer
18267db96d56Sopenharmony_ci===========================================================
18277db96d56Sopenharmony_ci
18287db96d56Sopenharmony_ci.. module:: distutils.command.bdist
18297db96d56Sopenharmony_ci   :synopsis: Build a binary installer for a package
18307db96d56Sopenharmony_ci
18317db96d56Sopenharmony_ci
18327db96d56Sopenharmony_ci.. % todo
18337db96d56Sopenharmony_ci
18347db96d56Sopenharmony_ci
18357db96d56Sopenharmony_ci:mod:`distutils.command.bdist_packager` --- Abstract base class for packagers
18367db96d56Sopenharmony_ci=============================================================================
18377db96d56Sopenharmony_ci
18387db96d56Sopenharmony_ci.. module:: distutils.command.bdist_packager
18397db96d56Sopenharmony_ci   :synopsis: Abstract base class for packagers
18407db96d56Sopenharmony_ci
18417db96d56Sopenharmony_ci
18427db96d56Sopenharmony_ci.. % todo
18437db96d56Sopenharmony_ci
18447db96d56Sopenharmony_ci
18457db96d56Sopenharmony_ci:mod:`distutils.command.bdist_dumb` --- Build a "dumb" installer
18467db96d56Sopenharmony_ci================================================================
18477db96d56Sopenharmony_ci
18487db96d56Sopenharmony_ci.. module:: distutils.command.bdist_dumb
18497db96d56Sopenharmony_ci   :synopsis: Build a "dumb" installer - a simple archive of files
18507db96d56Sopenharmony_ci
18517db96d56Sopenharmony_ci
18527db96d56Sopenharmony_ci.. % todo
18537db96d56Sopenharmony_ci
18547db96d56Sopenharmony_ci
18557db96d56Sopenharmony_ci:mod:`distutils.command.bdist_rpm` --- Build a binary distribution as a Redhat RPM and SRPM
18567db96d56Sopenharmony_ci===========================================================================================
18577db96d56Sopenharmony_ci
18587db96d56Sopenharmony_ci.. module:: distutils.command.bdist_rpm
18597db96d56Sopenharmony_ci   :synopsis: Build a binary distribution as a Redhat RPM and SRPM
18607db96d56Sopenharmony_ci
18617db96d56Sopenharmony_ci
18627db96d56Sopenharmony_ci.. % todo
18637db96d56Sopenharmony_ci
18647db96d56Sopenharmony_ci
18657db96d56Sopenharmony_ci:mod:`distutils.command.sdist` --- Build a source distribution
18667db96d56Sopenharmony_ci==============================================================
18677db96d56Sopenharmony_ci
18687db96d56Sopenharmony_ci.. module:: distutils.command.sdist
18697db96d56Sopenharmony_ci   :synopsis: Build a source distribution
18707db96d56Sopenharmony_ci
18717db96d56Sopenharmony_ci
18727db96d56Sopenharmony_ci.. % todo
18737db96d56Sopenharmony_ci
18747db96d56Sopenharmony_ci
18757db96d56Sopenharmony_ci:mod:`distutils.command.build` --- Build all files of a package
18767db96d56Sopenharmony_ci===============================================================
18777db96d56Sopenharmony_ci
18787db96d56Sopenharmony_ci.. module:: distutils.command.build
18797db96d56Sopenharmony_ci   :synopsis: Build all files of a package
18807db96d56Sopenharmony_ci
18817db96d56Sopenharmony_ci
18827db96d56Sopenharmony_ci.. % todo
18837db96d56Sopenharmony_ci
18847db96d56Sopenharmony_ci
18857db96d56Sopenharmony_ci:mod:`distutils.command.build_clib` --- Build any C libraries in a package
18867db96d56Sopenharmony_ci==========================================================================
18877db96d56Sopenharmony_ci
18887db96d56Sopenharmony_ci.. module:: distutils.command.build_clib
18897db96d56Sopenharmony_ci   :synopsis: Build any C libraries in a package
18907db96d56Sopenharmony_ci
18917db96d56Sopenharmony_ci
18927db96d56Sopenharmony_ci.. % todo
18937db96d56Sopenharmony_ci
18947db96d56Sopenharmony_ci
18957db96d56Sopenharmony_ci:mod:`distutils.command.build_ext` --- Build any extensions in a package
18967db96d56Sopenharmony_ci========================================================================
18977db96d56Sopenharmony_ci
18987db96d56Sopenharmony_ci.. module:: distutils.command.build_ext
18997db96d56Sopenharmony_ci   :synopsis: Build any extensions in a package
19007db96d56Sopenharmony_ci
19017db96d56Sopenharmony_ci
19027db96d56Sopenharmony_ci.. % todo
19037db96d56Sopenharmony_ci
19047db96d56Sopenharmony_ci
19057db96d56Sopenharmony_ci:mod:`distutils.command.build_py` --- Build the .py/.pyc files of a package
19067db96d56Sopenharmony_ci===========================================================================
19077db96d56Sopenharmony_ci
19087db96d56Sopenharmony_ci.. module:: distutils.command.build_py
19097db96d56Sopenharmony_ci   :synopsis: Build the .py/.pyc files of a package
19107db96d56Sopenharmony_ci
19117db96d56Sopenharmony_ci
19127db96d56Sopenharmony_ci.. class:: build_py
19137db96d56Sopenharmony_ci
19147db96d56Sopenharmony_ci.. class:: build_py_2to3
19157db96d56Sopenharmony_ci
19167db96d56Sopenharmony_ci   Alternative implementation of build_py which also runs the
19177db96d56Sopenharmony_ci   2to3 conversion library on each .py file that is going to be
19187db96d56Sopenharmony_ci   installed. To use this in a setup.py file for a distribution
19197db96d56Sopenharmony_ci   that is designed to run with both Python 2.x and 3.x, add::
19207db96d56Sopenharmony_ci
19217db96d56Sopenharmony_ci     try:
19227db96d56Sopenharmony_ci         from distutils.command.build_py import build_py_2to3 as build_py
19237db96d56Sopenharmony_ci     except ImportError:
19247db96d56Sopenharmony_ci         from distutils.command.build_py import build_py
19257db96d56Sopenharmony_ci
19267db96d56Sopenharmony_ci   to your setup.py, and later::
19277db96d56Sopenharmony_ci
19287db96d56Sopenharmony_ci      cmdclass = {'build_py': build_py}
19297db96d56Sopenharmony_ci
19307db96d56Sopenharmony_ci   to the invocation of setup().
19317db96d56Sopenharmony_ci
19327db96d56Sopenharmony_ci
19337db96d56Sopenharmony_ci:mod:`distutils.command.build_scripts` --- Build the scripts of a package
19347db96d56Sopenharmony_ci=========================================================================
19357db96d56Sopenharmony_ci
19367db96d56Sopenharmony_ci.. module:: distutils.command.build_scripts
19377db96d56Sopenharmony_ci   :synopsis: Build the scripts of a package
19387db96d56Sopenharmony_ci
19397db96d56Sopenharmony_ci
19407db96d56Sopenharmony_ci.. % todo
19417db96d56Sopenharmony_ci
19427db96d56Sopenharmony_ci
19437db96d56Sopenharmony_ci:mod:`distutils.command.clean` --- Clean a package build area
19447db96d56Sopenharmony_ci=============================================================
19457db96d56Sopenharmony_ci
19467db96d56Sopenharmony_ci.. module:: distutils.command.clean
19477db96d56Sopenharmony_ci   :synopsis: Clean a package build area
19487db96d56Sopenharmony_ci
19497db96d56Sopenharmony_ciThis command removes the temporary files created by :command:`build`
19507db96d56Sopenharmony_ciand its subcommands, like intermediary compiled object files.  With
19517db96d56Sopenharmony_cithe ``--all`` option, the complete build directory will be removed.
19527db96d56Sopenharmony_ci
19537db96d56Sopenharmony_ciExtension modules built :ref:`in place <distutils-build-ext-inplace>`
19547db96d56Sopenharmony_ciwill not be cleaned, as they are not in the build directory.
19557db96d56Sopenharmony_ci
19567db96d56Sopenharmony_ci
19577db96d56Sopenharmony_ci:mod:`distutils.command.config` --- Perform package configuration
19587db96d56Sopenharmony_ci=================================================================
19597db96d56Sopenharmony_ci
19607db96d56Sopenharmony_ci.. module:: distutils.command.config
19617db96d56Sopenharmony_ci   :synopsis: Perform package configuration
19627db96d56Sopenharmony_ci
19637db96d56Sopenharmony_ci
19647db96d56Sopenharmony_ci.. % todo
19657db96d56Sopenharmony_ci
19667db96d56Sopenharmony_ci
19677db96d56Sopenharmony_ci:mod:`distutils.command.install` --- Install a package
19687db96d56Sopenharmony_ci======================================================
19697db96d56Sopenharmony_ci
19707db96d56Sopenharmony_ci.. module:: distutils.command.install
19717db96d56Sopenharmony_ci   :synopsis: Install a package
19727db96d56Sopenharmony_ci
19737db96d56Sopenharmony_ci
19747db96d56Sopenharmony_ci.. % todo
19757db96d56Sopenharmony_ci
19767db96d56Sopenharmony_ci
19777db96d56Sopenharmony_ci:mod:`distutils.command.install_data` --- Install data files from a package
19787db96d56Sopenharmony_ci===========================================================================
19797db96d56Sopenharmony_ci
19807db96d56Sopenharmony_ci.. module:: distutils.command.install_data
19817db96d56Sopenharmony_ci   :synopsis: Install data files from a package
19827db96d56Sopenharmony_ci
19837db96d56Sopenharmony_ci
19847db96d56Sopenharmony_ci.. % todo
19857db96d56Sopenharmony_ci
19867db96d56Sopenharmony_ci
19877db96d56Sopenharmony_ci:mod:`distutils.command.install_headers` --- Install C/C++ header files from a package
19887db96d56Sopenharmony_ci======================================================================================
19897db96d56Sopenharmony_ci
19907db96d56Sopenharmony_ci.. module:: distutils.command.install_headers
19917db96d56Sopenharmony_ci   :synopsis: Install C/C++ header files from a package
19927db96d56Sopenharmony_ci
19937db96d56Sopenharmony_ci
19947db96d56Sopenharmony_ci.. % todo
19957db96d56Sopenharmony_ci
19967db96d56Sopenharmony_ci
19977db96d56Sopenharmony_ci:mod:`distutils.command.install_lib` --- Install library files from a package
19987db96d56Sopenharmony_ci=============================================================================
19997db96d56Sopenharmony_ci
20007db96d56Sopenharmony_ci.. module:: distutils.command.install_lib
20017db96d56Sopenharmony_ci   :synopsis: Install library files from a package
20027db96d56Sopenharmony_ci
20037db96d56Sopenharmony_ci
20047db96d56Sopenharmony_ci.. % todo
20057db96d56Sopenharmony_ci
20067db96d56Sopenharmony_ci
20077db96d56Sopenharmony_ci:mod:`distutils.command.install_scripts` --- Install script files from a package
20087db96d56Sopenharmony_ci================================================================================
20097db96d56Sopenharmony_ci
20107db96d56Sopenharmony_ci.. module:: distutils.command.install_scripts
20117db96d56Sopenharmony_ci   :synopsis: Install script files from a package
20127db96d56Sopenharmony_ci
20137db96d56Sopenharmony_ci
20147db96d56Sopenharmony_ci.. % todo
20157db96d56Sopenharmony_ci
20167db96d56Sopenharmony_ci
20177db96d56Sopenharmony_ci:mod:`distutils.command.register` --- Register a module with the Python Package Index
20187db96d56Sopenharmony_ci=====================================================================================
20197db96d56Sopenharmony_ci
20207db96d56Sopenharmony_ci.. module:: distutils.command.register
20217db96d56Sopenharmony_ci   :synopsis: Register a module with the Python Package Index
20227db96d56Sopenharmony_ci
20237db96d56Sopenharmony_ci
20247db96d56Sopenharmony_ciThe ``register`` command registers the package with the Python Package  Index.
20257db96d56Sopenharmony_ciThis is described in more detail in :pep:`301`.
20267db96d56Sopenharmony_ci
20277db96d56Sopenharmony_ci.. % todo
20287db96d56Sopenharmony_ci
20297db96d56Sopenharmony_ci
20307db96d56Sopenharmony_ci:mod:`distutils.command.check` --- Check the meta-data of a package
20317db96d56Sopenharmony_ci===================================================================
20327db96d56Sopenharmony_ci
20337db96d56Sopenharmony_ci.. module:: distutils.command.check
20347db96d56Sopenharmony_ci   :synopsis: Check the meta-data of a package
20357db96d56Sopenharmony_ci
20367db96d56Sopenharmony_ci
20377db96d56Sopenharmony_ciThe ``check`` command performs some tests on the meta-data of a package.
20387db96d56Sopenharmony_ciFor example, it verifies that all required meta-data are provided as
20397db96d56Sopenharmony_cithe arguments passed to the :func:`setup` function.
20407db96d56Sopenharmony_ci
20417db96d56Sopenharmony_ci.. % todo
2042