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