Project:Python/python-single-r1

python-single-r1 is the python-r1 suite eclass intended for ebuilds that install files that may be used only with one of the Python interpreters installed on the system. This often includes simple Python scripts that have no need for supporting multiple interpreters and programs that embed Python.

Since building packages with a single Python interpreter is pretty straightforward and supported correctly by most build systems, this eclass is much simple than python-r1.

Description
python-single-r1 is suited to provide user with a choice of one Python implementation he wishes to build his package with. It exports a simple pkg_setup implementation that obtains that choice and performs a complete build environment setup for it.

This kind of setup is enough for most build systems to be able to find and use the implementation of choice properly. If the installed Python scripts lack proper shebang, python_fix_shebang can be used to fix them.

PYTHON_COMPAT
Obligatory. Must be set above the inherit line.

A list of all Python implementations supported by ebuild. This variable is described more thoroughly in PYTHON_COMPAT article.

PYTHON_REQ_USE
Optional, defaults to none. Must be set above the inherit line.

USE-dependency that will be applied to all Python interpreters pulled in as dependencies. Takes the form of EAPI 4 USE dependency string, must apply cleanly to all supported Python implementations. See Project:Python/Implementation USE flags for reference.

Variables exported by eclass
Obligatory: It is the ebuild author's responsibility to set DEPEND, RDEPEND, and REQUIRED_USE; the eclass does not set them.

PYTHON_DEPS
Contains the dependency string on Python interpreters and auxiliary tools.

It must be used within RDEPEND and/or DEPEND. If the Python dependency is conditional to a USE flag, the reference should be placed in appropriate USE-conditional block.

PYTHON_REQUIRED_USE
Contains the REQUIRED_USE constraint requiring at least one Python implementation to be selected.

It must be used within REQUIRED_USE. If the Python dependency is conditional to a USE flag, the reference should be placed in appropriate USE-conditional block.

PYTHON_USEDEP
Contains a USE dependency string that must be used to enforce matching Python implementations on package dependencies.

It can be used on package dependencies which are using the python-r1 and python-single-r1 eclasses.

RDEPEND, DEPEND
Obligatory. Must be set (somewhere after the inherit line, unless distutils-r1 is used).

RDEPEND and DEPEND need to be defined by the ebuild to provide dependencies on proper Python implementations and packages.

The eclass provides PYTHON_DEPS convenience variable with a proper dependency on Python interpreters. If the Python support in package is unconditional, PYTHON_DEPS needs to be placed directly in RDEPEND and/or DEPEND. If the Python support is conditional to a USE flag, the PYTHON_DEPS reference needs to be placed inside matching USE conditional.

Additionally, the eclass provides PYTHON_USEDEP to provide proper USE dependencies on packages providing Python modules.

REQUIRED_USE
Obligatory. Must be set (somewhere after the inherit line, unless distutils-r1 is used).

REQUIRED_USE needs to be defined by the ebuild so that at least one of the supported Python implementations is enabled at installation time, pulling in the proper Python dependencies.

The eclass provides PYTHON_REQUIRED_USE convenience variable with a proper REQUIRED_USE value. If the Python support in package is unconditional during build- or run-time, PYTHON_REQUIRED_USE needs to be placed directly in REQUIRED_USE. If the Python support is always conditional to a USE flag, the PYTHON_REQUIRED_USE reference needs to be placed inside matching USE conditional.

python_gen_usedep
Usage: python_gen_usedep ...

Outputs USE dependency string that requires the implementations matching pattern(s) to match. Can be used to output USE-dependencies on dependencies that are available or needed only in some of the supported implementations.

If multiple patterns are provided, implementations that match any of them are used. Please remember to quote wildcard characters in patterns to avoid random filename expansion.

Often, python_gen_usedep needs to be used with proper REQUIRED_USE in order to require any of the implementations to be enabled.

python_gen_useflags
Usage: python_gen_useflags ...

Outputs space separated list of flags for implementations matching pattern(s). Can be used to create REQUIRED_USE values, usually in conjunction with python_gen_usedep.

If multiple patterns are provided, implementations that match any of them are used. Please remember to quote wildcard characters in patterns to avoid random filename expansion.

python_gen_cond_dep
Usage: python_gen_cond_dep  ...

Outputs provided dependency strings enclosed in USE-conditional block, making them conditional to one of the implementations matching patterns being enabled.

If multiple patterns are provided, implementations that match any of them are used. Please remember to quote wildcard characters in patterns to avoid random filename expansion.

${PYTHON_USEDEP} may be used inside the dependency string. It will be expanded appropriately.

python_gen_impl_dep
Usage: python_gen_impl_dep [ [ ...]]

Outputs a dependency on Python implementations with the USE dependency string from , or no USE dependency string if it is empty or not passed. If any  s are provided, the dependency will be generated only for matching implementations. Otherwise, all implementations will be used.

If multiple patterns are provided, implementations that match any of them are used. Please remember to quote wildcard characters in patterns to avoid random filename expansion.

This function is intended to be used when more than one form of dependency string is needed. In this case, PYTHON_REQ_USE and PYTHON_DEPS should be used for the common form, and python_gen_impl_dep to generate additional variants.

python_setup
Usage: python_setup

Obtain the user-selected Python interpreter and set up the build environment for it. EPYTHON, PYTHON and BUILD_DIR are exported, and Python executable & pkg-config wrappers will be set up.

This function dies if no Python interpreter flag was enabled or the flags are invalid. To avoid the delayed failure, please make sure to use PYTHON_REQUIRED_USE.

python-single-r1_pkg_setup
Usage: python-single-r1_pkg_setup

The standard exported pkg_setup phase. It calls python_setup.

If Python support in the package is conditional to a USE flag, a custom pkg_setup must be used with python-single-r1_pkg_setup being invoked conditionally to the flag.