mirror of
https://git.yoctoproject.org/poky
synced 2026-02-05 16:28:43 +01:00
Python 3 resurrected the default to optimised patch, on the rationale that embedded systems want all the performance they can get. Unfortunately the only impact Python "optimisation" has is to remove all asserts which can be actively harmful, so remove this patch. (From OE-Core rev: 1e43b836106ed13cde294e2c565eaea6fe5efca7) Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
226 lines
8.4 KiB
BlitzBasic
226 lines
8.4 KiB
BlitzBasic
require recipes-devtools/python/python.inc
|
|
|
|
DEPENDS = "python3-native libffi bzip2 db gdbm openssl readline sqlite3 zlib virtual/libintl xz"
|
|
PR = "${INC_PR}.0"
|
|
PYTHON_MAJMIN = "3.5"
|
|
PYTHON_BINABI= "${PYTHON_MAJMIN}m"
|
|
DISTRO_SRC_URI ?= "file://sitecustomize.py"
|
|
DISTRO_SRC_URI_linuxstdbase = ""
|
|
SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
|
|
file://python-config.patch \
|
|
file://000-cross-compile.patch \
|
|
file://020-dont-compile-python-files.patch \
|
|
file://030-fixup-include-dirs.patch \
|
|
file://070-dont-clean-ipkg-install.patch \
|
|
file://080-distutils-dont_adjust_files.patch \
|
|
file://110-enable-zlib.patch \
|
|
file://130-readline-setup.patch \
|
|
file://150-fix-setupterm.patch \
|
|
file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \
|
|
${DISTRO_SRC_URI} \
|
|
"
|
|
|
|
SRC_URI += "\
|
|
file://03-fix-tkinter-detection.patch \
|
|
file://avoid_warning_about_tkinter.patch \
|
|
file://cgi_py.patch \
|
|
file://host_include_contamination.patch \
|
|
file://python-3.3-multilib.patch \
|
|
file://shutil-follow-symlink-fix.patch \
|
|
file://sysroot-include-headers.patch \
|
|
file://unixccompiler.patch \
|
|
file://avoid-ncursesw-include-path.patch \
|
|
file://python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch \
|
|
file://python3-setup.py-no-host-headers-libs.patch \
|
|
file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \
|
|
file://setup.py-check-cross_compiling-when-get-FLAGS.patch \
|
|
file://setup.py-find-libraries-in-staging-dirs.patch \
|
|
file://use_packed_importlib.patch \
|
|
file://configure.ac-fix-LIBPL.patch \
|
|
"
|
|
SRC_URI[md5sum] = "e9ea6f2623fffcdd871b7b19113fde80"
|
|
SRC_URI[sha256sum] = "c6d57c0c366d9060ab6c0cdf889ebf3d92711d466cc0119c441dbf2746f725c9"
|
|
|
|
# exclude pre-releases for both python 2.x and 3.x
|
|
UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
|
|
|
|
LIC_FILES_CHKSUM = "file://LICENSE;md5=dd98d01d471fac8d8dbdd975229dba03"
|
|
|
|
S = "${WORKDIR}/Python-${PV}"
|
|
|
|
inherit autotools multilib_header python3native pkgconfig
|
|
|
|
CONFIGUREOPTS += " --with-system-ffi "
|
|
|
|
CACHED_CONFIGUREVARS = "ac_cv_have_chflags=no \
|
|
ac_cv_have_lchflags=no \
|
|
ac_cv_have_long_long_format=yes \
|
|
ac_cv_buggy_getaddrinfo=no \
|
|
ac_cv_file__dev_ptmx=yes \
|
|
ac_cv_file__dev_ptc=no \
|
|
"
|
|
|
|
TARGET_CC_ARCH += "-DNDEBUG -fno-inline"
|
|
SDK_CC_ARCH += "-DNDEBUG -fno-inline"
|
|
EXTRA_OEMAKE += "CROSS_COMPILE=yes"
|
|
EXTRA_OECONF += "CROSSPYTHONPATH=${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/ --without-ensurepip"
|
|
|
|
export CROSS_COMPILE = "${TARGET_PREFIX}"
|
|
export _PYTHON_PROJECT_BASE = "${B}"
|
|
export _PYTHON_PROJECT_SRC = "${S}"
|
|
export CCSHARED = "-fPIC"
|
|
|
|
# Fix ctypes cross compilation
|
|
export CROSSPYTHONPATH = "${B}/build/lib.linux-${TARGET_ARCH}-${PYTHON_MAJMIN}:${S}/Lib:${S}/Lib/plat-linux"
|
|
|
|
# No ctypes option for python 3
|
|
PYTHONLSBOPTS = ""
|
|
|
|
do_configure_append() {
|
|
rm -f ${S}/Makefile.orig
|
|
autoreconf -Wcross --verbose --install --force --exclude=autopoint ../Python-${PV}/Modules/_ctypes/libffi
|
|
}
|
|
|
|
do_compile() {
|
|
# regenerate platform specific files, because they depend on system headers
|
|
cd ${S}/Lib/plat-linux*
|
|
include=${STAGING_INCDIR} ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
|
|
${S}/Tools/scripts/h2py.py -i '(u_long)' \
|
|
${STAGING_INCDIR}/dlfcn.h \
|
|
${STAGING_INCDIR}/linux/cdrom.h \
|
|
${STAGING_INCDIR}/netinet/in.h \
|
|
${STAGING_INCDIR}/sys/types.h
|
|
sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
|
|
cd -
|
|
|
|
|
|
# remove any bogus LD_LIBRARY_PATH
|
|
sed -i -e s,RUNSHARED=.*,RUNSHARED=, Makefile
|
|
|
|
if [ ! -f Makefile.orig ]; then
|
|
install -m 0644 Makefile Makefile.orig
|
|
fi
|
|
sed -i -e 's,^CONFIGURE_LDFLAGS=.*,CONFIGURE_LDFLAGS=-L. -L${STAGING_LIBDIR},g' \
|
|
-e 's,libdir=${libdir},libdir=${STAGING_LIBDIR},g' \
|
|
-e 's,libexecdir=${libexecdir},libexecdir=${STAGING_DIR_HOST}${libexecdir},g' \
|
|
-e 's,^LIBDIR=.*,LIBDIR=${STAGING_LIBDIR},g' \
|
|
-e 's,includedir=${includedir},includedir=${STAGING_INCDIR},g' \
|
|
-e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
|
|
-e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
|
|
Makefile
|
|
# save copy of it now, because if we do it in do_install and
|
|
# then call do_install twice we get Makefile.orig == Makefile.sysroot
|
|
install -m 0644 Makefile Makefile.sysroot
|
|
|
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
|
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
|
|
STAGING_LIBDIR=${STAGING_LIBDIR} \
|
|
STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
|
|
STAGING_INCDIR=${STAGING_INCDIR} \
|
|
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
|
|
LIB=${baselib} \
|
|
ARCH=${TARGET_ARCH} \
|
|
OPT="${CFLAGS}" libpython3.so
|
|
|
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
|
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
|
|
STAGING_LIBDIR=${STAGING_LIBDIR} \
|
|
STAGING_INCDIR=${STAGING_INCDIR} \
|
|
STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
|
|
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
|
|
LIB=${baselib} \
|
|
ARCH=${TARGET_ARCH} \
|
|
OPT="${CFLAGS}"
|
|
}
|
|
|
|
do_install() {
|
|
# make install needs the original Makefile, or otherwise the inclues would
|
|
# go to ${D}${STAGING...}/...
|
|
install -m 0644 Makefile.orig Makefile
|
|
|
|
install -d ${D}${libdir}/pkgconfig
|
|
install -d ${D}${libdir}/python${PYTHON_MAJMIN}/config
|
|
|
|
# rerun the build once again with original makefile this time
|
|
# run install in a separate step to avoid compile/install race
|
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
|
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
|
|
STAGING_LIBDIR=${STAGING_LIBDIR} \
|
|
STAGING_INCDIR=${STAGING_INCDIR} \
|
|
STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
|
|
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
|
|
LIB=${baselib} \
|
|
ARCH=${TARGET_ARCH} \
|
|
DESTDIR=${D} LIBDIR=${libdir}
|
|
|
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
|
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
|
|
STAGING_LIBDIR=${STAGING_LIBDIR} \
|
|
STAGING_INCDIR=${STAGING_INCDIR} \
|
|
STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
|
|
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
|
|
LIB=${baselib} \
|
|
ARCH=${TARGET_ARCH} \
|
|
DESTDIR=${D} LIBDIR=${libdir} install
|
|
|
|
# avoid conflict with 2to3 from Python 2
|
|
rm -f ${D}/${bindir}/2to3
|
|
|
|
install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
|
|
|
|
if [ -e ${WORKDIR}/sitecustomize.py ]; then
|
|
install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
|
|
fi
|
|
|
|
oe_multilib_header python${PYTHON_BINABI}/pyconfig.h
|
|
}
|
|
|
|
do_install_append_class-nativesdk () {
|
|
create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo'
|
|
}
|
|
|
|
SSTATE_SCAN_FILES += "Makefile"
|
|
PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
|
|
|
|
py_package_preprocess () {
|
|
# copy back the old Makefile to fix target package
|
|
install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
|
|
# Remove references to buildmachine paths in target Makefile and _sysconfigdata
|
|
sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
|
|
${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile \
|
|
${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
|
|
}
|
|
|
|
require python-${PYTHON_MAJMIN}-manifest.inc
|
|
|
|
# manual dependency additions
|
|
RPROVIDES_${PN}-core = "${PN}"
|
|
RRECOMMENDS_${PN}-core = "${PN}-readline"
|
|
RRECOMMENDS_${PN}-crypt = "openssl"
|
|
RRECOMMENDS_${PN}-crypt_class-nativesdk = "nativesdk-openssl"
|
|
|
|
FILES_${PN}-2to3 += "${bindir}/2to3-${PYTHON_MAJMIN}"
|
|
FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
|
|
FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
|
|
|
|
PACKAGES =+ "${PN}-pyvenv"
|
|
FILES_${PN}-pyvenv += "${bindir}/pyvenv-${PYTHON_MAJMIN} ${bindir}/pyvenv"
|
|
|
|
# package libpython3
|
|
PACKAGES =+ "libpython3 libpython3-staticdev"
|
|
FILES_libpython3 = "${libdir}/libpython*.so.*"
|
|
FILES_libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}/libpython${PYTHON_BINABI}.a"
|
|
INSANE_SKIP_${PN}-dev += "dev-elf"
|
|
|
|
# catch all the rest (unsorted)
|
|
PACKAGES += "${PN}-misc"
|
|
RDEPENDS_${PN}-misc += "${PN}-core"
|
|
RDEPENDS_${PN}-modules += "${PN}-misc"
|
|
FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
|
|
|
|
# catch manpage
|
|
PACKAGES += "${PN}-man"
|
|
FILES_${PN}-man = "${datadir}/man"
|
|
|
|
BBCLASSEXTEND = "nativesdk"
|