| Patrick Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame^] | 1 | # | 
|  | 2 | # Copyright OpenEmbedded Contributors | 
|  | 3 | # | 
|  | 4 | # SPDX-License-Identifier: MIT | 
|  | 5 | # | 
|  | 6 |  | 
|  | 7 | # Common infrastructure for Python packages that use PEP-517 compliant packaging. | 
|  | 8 | # https://www.python.org/dev/peps/pep-0517/ | 
|  | 9 | # | 
|  | 10 | # This class will build a wheel in do_compile, and use pypa/installer to install | 
|  | 11 | # it in do_install. | 
|  | 12 |  | 
|  | 13 | DEPENDS:append = " python3-picobuild-native python3-installer-native" | 
|  | 14 |  | 
|  | 15 | # Where to execute the build process from | 
|  | 16 | PEP517_SOURCE_PATH ?= "${S}" | 
|  | 17 |  | 
|  | 18 | # The directory where wheels will be written | 
|  | 19 | PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" | 
|  | 20 |  | 
|  | 21 | PEP517_PICOBUILD_OPTS ?= "" | 
|  | 22 |  | 
|  | 23 | # The interpreter to use for installed scripts | 
|  | 24 | PEP517_INSTALL_PYTHON = "python3" | 
|  | 25 | PEP517_INSTALL_PYTHON:class-native = "nativepython3" | 
|  | 26 |  | 
|  | 27 | # pypa/installer option to control the bytecode compilation | 
|  | 28 | INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0" | 
|  | 29 |  | 
|  | 30 | # PEP517 doesn't have a specific configure step, so set an empty do_configure to avoid | 
|  | 31 | # running base_do_configure. | 
|  | 32 | python_pep517_do_configure () { | 
|  | 33 | : | 
|  | 34 | } | 
|  | 35 |  | 
|  | 36 | # When we have Python 3.11 we can parse pyproject.toml to determine the build | 
|  | 37 | # API entry point directly | 
|  | 38 | python_pep517_do_compile () { | 
|  | 39 | nativepython3 -m picobuild --source ${PEP517_SOURCE_PATH} --dest ${PEP517_WHEEL_PATH} --wheel ${PEP517_PICOBUILD_OPTS} | 
|  | 40 | } | 
|  | 41 | do_compile[cleandirs] += "${PEP517_WHEEL_PATH}" | 
|  | 42 |  | 
|  | 43 | python_pep517_do_install () { | 
|  | 44 | COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' | wc -l) | 
|  | 45 | if test $COUNT -eq 0; then | 
|  | 46 | bbfatal No wheels found in ${PEP517_WHEEL_PATH} | 
|  | 47 | elif test $COUNT -gt 1; then | 
|  | 48 | bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen | 
|  | 49 | fi | 
|  | 50 |  | 
|  | 51 | nativepython3 -m installer ${INSTALL_WHEEL_COMPILE_BYTECODE} --interpreter "${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}" --destdir=${D} ${PEP517_WHEEL_PATH}/*.whl | 
|  | 52 | } | 
|  | 53 |  | 
|  | 54 | # A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native. | 
|  | 55 | python_pep517_do_bootstrap_install () { | 
|  | 56 | install -d ${D}${PYTHON_SITEPACKAGES_DIR} | 
|  | 57 | unzip -d ${D}${PYTHON_SITEPACKAGES_DIR} ${PEP517_WHEEL_PATH}/*.whl | 
|  | 58 | } | 
|  | 59 |  | 
|  | 60 | EXPORT_FUNCTIONS do_configure do_compile do_install |