summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/python/python3_3.7.6.bb
diff options
context:
space:
mode:
authorAlexander Kanavin <alex.kanavin@gmail.com>2020-01-20 18:24:47 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-01-21 12:52:52 +0000
commit28c5a5033e4893ec1f1fd5aab8b2fd0d5f815678 (patch)
tree516cabd91f2d95e50eb1980efa4cda946fdb8b57 /meta/recipes-devtools/python/python3_3.7.6.bb
parentf7a99d04e6fb81ffbb14cfa3caaf47e89bb424b5 (diff)
downloadpoky-28c5a5033e4893ec1f1fd5aab8b2fd0d5f815678.tar.gz
python3: update to 3.8.1
Drop backports, rebase other patches. 0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch is removed as the use case (allowing python 2 and 3 to coexist in SDKs) is no longer relevant with Python 2.x reaching end of line and upstream has refactored the code making a rebase difficult. If needed, please re-add the patch to py2, rather than py3. Python 3.8 no longer adds "m" to "3.8" in paths, so adjust the recipes and classes accordingly. The manifest for the 3.8.0 version is updated; particularly pkgutil module is now packaged in -core (as other things in core need it); this also necessitates allowing empty -pkgutil package to avoid breakage across layers. (From OE-Core rev: e6ab9f16b92aa1abdae82c535c1a452a1341b0e2) Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/python/python3_3.7.6.bb')
-rw-r--r--meta/recipes-devtools/python/python3_3.7.6.bb348
1 files changed, 0 insertions, 348 deletions
diff --git a/meta/recipes-devtools/python/python3_3.7.6.bb b/meta/recipes-devtools/python/python3_3.7.6.bb
deleted file mode 100644
index 8a03260f3f..0000000000
--- a/meta/recipes-devtools/python/python3_3.7.6.bb
+++ /dev/null
@@ -1,348 +0,0 @@
1SUMMARY = "The Python Programming Language"
2HOMEPAGE = "http://www.python.org"
3LICENSE = "PSFv2"
4SECTION = "devel/python"
5
6LIC_FILES_CHKSUM = "file://LICENSE;md5=e466242989bd33c1bd2b6a526a742498"
7
8SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
9 file://run-ptest \
10 file://create_manifest3.py \
11 file://get_module_deps3.py \
12 file://python3-manifest.json \
13 file://check_build_completeness.py \
14 file://cgi_py.patch \
15 file://0001-Do-not-add-usr-lib-termcap-to-linker-flags-to-avoid-.patch \
16 ${@bb.utils.contains('PACKAGECONFIG', 'tk', '', 'file://avoid_warning_about_tkinter.patch', d)} \
17 file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \
18 file://python-config.patch \
19 file://0001-Makefile.pre-use-qemu-wrapper-when-gathering-profile.patch \
20 file://0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch \
21 file://0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch \
22 file://0002-Don-t-do-runtime-test-to-get-float-byte-order.patch \
23 file://0003-setup.py-pass-missing-libraries-to-Extension-for-mul.patch \
24 file://0001-Lib-sysconfig.py-fix-another-place-where-lib-is-hard.patch \
25 file://0001-Makefile-fix-Issue36464-parallel-build-race-problem.patch \
26 file://0001-bpo-36852-proper-detection-of-mips-architecture-for-.patch \
27 file://crosspythonpath.patch \
28 file://reformat_sysconfig.py \
29 file://0001-Use-FLAG_REF-always-for-interned-strings.patch \
30 file://0001-test_locale.py-correct-the-test-output-format.patch \
31 file://0017-setup.py-do-not-report-missing-dependencies-for-disa.patch \
32 "
33
34SRC_URI_append_class-native = " \
35 file://0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch \
36 file://12-distutils-prefix-is-inside-staging-area.patch \
37 "
38SRC_URI_append_class-nativesdk = " \
39 file://0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch \
40 "
41
42SRC_URI[md5sum] = "c08fbee72ad5c2c95b0f4e44bf6fd72c"
43SRC_URI[sha256sum] = "55a2cce72049f0794e9a11a84862e9039af9183603b78bc60d89539f82cf533f"
44
45# exclude pre-releases for both python 2.x and 3.x
46UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
47
48CVE_PRODUCT = "python"
49
50# This is not exploitable when glibc has CVE-2016-10739 fixed.
51CVE_CHECK_WHITELIST += "CVE-2019-18348"
52
53PYTHON_MAJMIN = "3.7"
54PYTHON_BINABI = "${PYTHON_MAJMIN}m"
55
56S = "${WORKDIR}/Python-${PV}"
57
58BBCLASSEXTEND = "native nativesdk"
59
60inherit autotools pkgconfig qemu ptest multilib_header update-alternatives
61
62MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
63
64ALTERNATIVE_${PN}-dev = "python3-config"
65ALTERNATIVE_LINK_NAME[python3-config] = "${bindir}/python${PYTHON_BINABI}-config"
66ALTERNATIVE_TARGET[python3-config] = "${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}"
67
68
69DEPENDS = "bzip2-replacement-native libffi bzip2 openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux libtirpc libnsl2"
70DEPENDS_append_class-target = " python3-native"
71DEPENDS_append_class-nativesdk = " python3-native"
72
73EXTRA_OECONF = " --without-ensurepip --enable-shared"
74EXTRA_OECONF_append_class-native = " --bindir=${bindir}/${PN}"
75
76export CROSSPYTHONPATH="${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/"
77
78EXTRANATIVEPATH += "python3-native"
79
80CACHED_CONFIGUREVARS = " \
81 ac_cv_file__dev_ptmx=yes \
82 ac_cv_file__dev_ptc=no \
83 ac_cv_working_tzset=yes \
84"
85python() {
86 # PGO currently causes builds to not be reproducible, so disable it for
87 # now. See YOCTO #13407
88 if bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d) and d.getVar('BUILD_REPRODUCIBLE_BINARIES') != '1':
89 d.setVar('PACKAGECONFIG_PGO', 'pgo')
90 else:
91 d.setVar('PACKAGECONFIG_PGO', '')
92}
93
94PACKAGECONFIG_class-target ??= "readline ${PACKAGECONFIG_PGO} gdbm"
95PACKAGECONFIG_class-native ??= "readline gdbm"
96PACKAGECONFIG_class-nativesdk ??= "readline gdbm"
97PACKAGECONFIG[readline] = ",,readline"
98# Use profile guided optimisation by running PyBench inside qemu-user
99PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
100PACKAGECONFIG[tk] = ",,tk"
101PACKAGECONFIG[gdbm] = ",,gdbm"
102
103do_configure_prepend () {
104 mkdir -p ${B}/Modules
105 cat > ${B}/Modules/Setup.local << EOF
106*disabled*
107${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '', '_gdbm _dbm', d)}
108${@bb.utils.contains('PACKAGECONFIG', 'readline', '', 'readline', d)}
109EOF
110}
111
112CPPFLAGS_append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
113
114EXTRA_OEMAKE = '\
115 STAGING_LIBDIR=${STAGING_LIBDIR} \
116 STAGING_INCDIR=${STAGING_INCDIR} \
117 LIB=${baselib} \
118'
119
120do_compile_prepend_class-target() {
121 if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
122 qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])}"
123 cat >pgo-wrapper <<EOF
124#!/bin/sh
125cd ${B}
126$qemu_binary "\$@"
127EOF
128 chmod +x pgo-wrapper
129 fi
130}
131
132do_install_prepend() {
133 ${WORKDIR}/check_build_completeness.py ${T}/log.do_compile
134}
135
136do_install_append_class-target() {
137 oe_multilib_header python${PYTHON_BINABI}/pyconfig.h
138}
139
140do_install_append_class-native() {
141 # Make sure we use /usr/bin/env python
142 for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
143 sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
144 done
145 # Add a symlink to the native Python so that scripts can just invoke
146 # "nativepython" and get the right one without needing absolute paths
147 # (these often end up too long for the #! parser in the kernel as the
148 # buffer is 128 bytes long).
149 ln -s python3-native/python3 ${D}${bindir}/nativepython3
150}
151
152do_install_append() {
153 mkdir -p ${D}${libdir}/python-sysconfigdata
154 sysconfigfile=`find ${D} -name _sysconfig*.py`
155 cp $sysconfigfile ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
156
157 sed -i \
158 -e "s,^ 'LIBDIR'.*, 'LIBDIR': '${STAGING_LIBDIR}'\,,g" \
159 -e "s,^ 'INCLUDEDIR'.*, 'INCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
160 -e "s,^ 'CONFINCLUDEDIR'.*, 'CONFINCLUDEDIR': '${STAGING_INCDIR}'\,,g" \
161 -e "/^ 'INCLDIRSTOMAKE'/{N; s,/usr/include,${STAGING_INCDIR},g}" \
162 -e "/^ 'INCLUDEPY'/s,/usr/include,${STAGING_INCDIR},g" \
163 ${D}${libdir}/python-sysconfigdata/_sysconfigdata.py
164}
165
166do_install_append_class-nativesdk () {
167 create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} OEPYTHON3HOME='${prefix}' TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
168}
169
170SSTATE_SCAN_FILES += "Makefile _sysconfigdata.py"
171PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
172
173py_package_preprocess () {
174 # Remove references to buildmachine paths in target Makefile and _sysconfigdata
175 sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
176 -e 's|${DEBUG_PREFIX_MAP}||g' \
177 -e 's:${HOSTTOOLS_DIR}/::g' \
178 -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
179 -e 's:${RECIPE_SYSROOT}::g' \
180 -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
181 ${PKGD}/${prefix}/lib/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}*/Makefile \
182 ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py \
183 ${PKGD}/${bindir}/python${PYTHON_BINABI}-config
184
185 # Reformat _sysconfigdata after modifying it so that it remains
186 # reproducible
187 for c in ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py; do
188 python3 ${WORKDIR}/reformat_sysconfig.py $c
189 done
190
191 # Recompile _sysconfigdata after modifying it
192 cd ${PKGD}
193 sysconfigfile=`find . -name _sysconfigdata_*.py`
194 ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
195 -c "from py_compile import compile; compile('$sysconfigfile')"
196 ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
197 -c "from py_compile import compile; compile('$sysconfigfile', optimize=1)"
198 ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
199 -c "from py_compile import compile; compile('$sysconfigfile', optimize=2)"
200 cd -
201
202 mv ${PKGD}/${bindir}/python${PYTHON_BINABI}-config ${PKGD}/${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}
203
204 #Remove the unneeded copy of target sysconfig data
205 rm -rf ${PKGD}/${libdir}/python-sysconfigdata
206}
207
208# We want bytecode precompiled .py files (.pyc's) by default
209# but the user may set it on their own conf
210INCLUDE_PYCS ?= "1"
211
212python(){
213 import collections, json
214
215 filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
216 # This python changes the datastore based on the contents of a file, so mark
217 # that dependency.
218 bb.parse.mark_dependency(d, filename)
219
220 with open(filename) as manifest_file:
221 manifest_str = manifest_file.read()
222 json_start = manifest_str.find('# EOC') + 6
223 manifest_file.seek(json_start)
224 manifest_str = manifest_file.read()
225 python_manifest = json.loads(manifest_str, object_pairs_hook=collections.OrderedDict)
226
227 # First set RPROVIDES for -native case
228 # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
229 pn = 'python3'
230 rprovides = d.getVar('RPROVIDES').split()
231
232 # ${PN}-misc-native is not in the manifest
233 rprovides.append(pn + '-misc-native')
234
235 for key in python_manifest:
236 pypackage = pn + '-' + key + '-native'
237 if pypackage not in rprovides:
238 rprovides.append(pypackage)
239
240 d.setVar('RPROVIDES_class-native', ' '.join(rprovides))
241
242 # Then work on the target
243 include_pycs = d.getVar('INCLUDE_PYCS')
244
245 packages = d.getVar('PACKAGES').split()
246 pn = d.getVar('PN')
247
248 newpackages=[]
249 for key in python_manifest:
250 pypackage = pn + '-' + key
251
252 if pypackage not in packages:
253 # We need to prepend, otherwise python-misc gets everything
254 # so we use a new variable
255 newpackages.append(pypackage)
256
257 # "Build" python's manifest FILES, RDEPENDS and SUMMARY
258 d.setVar('FILES_' + pypackage, '')
259 for value in python_manifest[key]['files']:
260 d.appendVar('FILES_' + pypackage, ' ' + value)
261
262 # Add cached files
263 if include_pycs == '1':
264 for value in python_manifest[key]['cached']:
265 d.appendVar('FILES_' + pypackage, ' ' + value)
266
267 for value in python_manifest[key]['rdepends']:
268 # Make it work with or without $PN
269 if '${PN}' in value:
270 value=value.split('-', 1)[1]
271 d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
272
273 for value in python_manifest[key].get('rrecommends', ()):
274 if '${PN}' in value:
275 value=value.split('-', 1)[1]
276 d.appendVar('RRECOMMENDS_' + pypackage, ' ' + pn + '-' + value)
277
278 d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
279
280 # Prepending so to avoid python-misc getting everything
281 packages = newpackages + packages
282 d.setVar('PACKAGES', ' '.join(packages))
283 d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
284}
285
286# Files needed to create a new manifest
287
288do_create_manifest() {
289 # This task should be run with every new release of Python.
290 # We must ensure that PACKAGECONFIG enables everything when creating
291 # a new manifest, this is to base our new manifest on a complete
292 # native python build, containing all dependencies, otherwise the task
293 # wont be able to find the required files.
294 # e.g. BerkeleyDB is an optional build dependency so it may or may not
295 # be present, we must ensure it is.
296
297 cd ${WORKDIR}
298 # This needs to be executed by python-native and NOT by HOST's python
299 nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
300 cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
301}
302
303# bitbake python -c create_manifest
304addtask do_create_manifest
305
306# Make sure we have native python ready when we create a new manifest
307do_create_manifest[depends] += "${PN}:do_prepare_recipe_sysroot"
308do_create_manifest[depends] += "${PN}:do_patch"
309
310# manual dependency additions
311RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python3-modules"
312RRECOMMENDS_${PN}-crypt_append_class-target = " openssl ca-certificates"
313RRECOMMENDS_${PN}-crypt_append_class-nativesdk = " openssl ca-certificates"
314
315# For historical reasons PN is empty and provided by python3-modules
316FILES_${PN} = ""
317RPROVIDES_${PN}-modules = "${PN}"
318
319FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
320FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
321
322# provide python-pyvenv from python3-venv
323RPROVIDES_${PN}-venv += "python3-pyvenv"
324
325# package libpython3
326PACKAGES =+ "libpython3 libpython3-staticdev"
327FILES_libpython3 = "${libdir}/libpython*.so.*"
328FILES_libpython3-staticdev += "${prefix}/lib/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}-*/libpython${PYTHON_BINABI}.a"
329INSANE_SKIP_${PN}-dev += "dev-elf"
330
331# catch all the rest (unsorted)
332PACKAGES += "${PN}-misc"
333RDEPENDS_${PN}-misc += "python3-core python3-email python3-codecs python3-pydoc python3-pickle python3-audio"
334RDEPENDS_${PN}-modules_append_class-target = " python3-misc"
335RDEPENDS_${PN}-modules_append_class-nativesdk = " python3-misc"
336FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MAJMIN}/lib-dynload"
337
338# catch manpage
339PACKAGES += "${PN}-man"
340FILES_${PN}-man = "${datadir}/man"
341
342# See https://bugs.python.org/issue18748 and https://bugs.python.org/issue37395
343RDEPENDS_libpython3_append_libc-glibc = " libgcc"
344RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2 libgcc tzdata-europe coreutils sed"
345RDEPENDS_${PN}-ptest_append_libc-glibc = " locale-base-tr-tr.iso-8859-9"
346RDEPENDS_${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', 'tk tk-lib', '', d)}"
347RDEPENDS_${PN}-dev = ""
348