/[packages]/cauldron/python3/current/SPECS/python3.spec
ViewVC logotype

Contents of /cauldron/python3/current/SPECS/python3.spec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1673180 - (show annotations) (download)
Sun Jan 24 09:04:51 2021 UTC (3 years, 3 months ago) by neoclust
File size: 33837 byte(s)
Add P1000: Fixes CVE-2021-3177 (mga#28204)
1 # NOTES ON BOOTSTRAPING PYTHON 3.x:
2 #
3 # Due to a dependency cycle between Python, rpm, pip, setuptools, wheel,
4 # and other packages, in order to rebase Python 3 one has to build in the
5 # following order:
6 #
7 # 1. gdb %%bcond_with python
8 # 2. rpm-mageia-setup %%bcond_without bootstrap
9 # 3. python-rpm-generators %%bcond_without bootstrap
10 # 4 python3 (if python3 is build to core/udpates_testing there's no need to use %bcond_with rpmwheels)
11 # 5. python-setuptools %%bcond_without bootstrap
12 # 6. python-rpm-generators %%bcond_with bootstrap
13 # 7. python-pip %%bcond_without bootstrap
14 # 8. python-wheel %%bcond_without bootstrap
15 # 9. python-setuptools %%bcond_with bootstrap
16 # 10. python-pip %%bcond_with bootstrap
17 # 11. python-wheel %%bcond_with bootstrap
18 # 12. rpm
19 # 13. python-cython
20 # 14. python-numpy
21 # 15. boost
22 # 16. gdb %%bcond_without python
23 # 17. meson
24 # 18. python-coverage
25 # 19. python-nose
26 # 20. python-yaml
27 # 21. python-markdown
28 # 22. python-markupsafe
29 # 23. python-beaker
30 # 24. python-setuptools_scm
31 # 25. python-dateutil
32 # 26. python-six
33 # 27. python-pbr
34 # 28. python-argparse
35 # 29. python-traceback2
36 # 30. python-linecache2
37 # 31. python-unittest2
38 # 32. python-funcsigs
39 # 33. python-mock
40 # 34. python-mako
41 # 35 python-pygments
42 # 36. gobject-introspection
43 # 37. python-enchant
44 # 38. file
45 # 39. rpmlint
46 # 40. rpm-mageia-setup %%bcond_with bootstrap
47
48 # Then the most important packages have to be built, starting from their
49 # various leaf dependencies recursively. After these have been built, a
50 # targeted rebuild should be requested for the rest.
51 #
52 # Currently these packages are recommended to have been built before a targeted
53 # rebuild after a python abi change:
54 # python-sphinx, python-pytest, python-requests
55
56 %global pybasever 3.8
57 %global familyver 3
58
59 # pybasever without the dot:
60 %global pyshortver 38
61
62 # version
63 %global version 3.8.7
64 %global docver %{version}
65
66 # comment out if not prerel
67 #global prerel rc1
68
69 # rel for bumping
70 %global rel 3
71
72 # filter out bogus requires on python(abi) = 3.6 for testsuite
73 %global __requires_exclude_from %{?__requires_exclude_from:%__requires_exclude_from|}^%{_libdir}/python%{pybasever}/test/test_importlib/data
74
75 # For bootstrapping python3.x to python3.y
76 %bcond_with bootstrap
77
78 # Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
79 # Uses upstream bundled prebuilt wheels otherwise
80 %bcond_without rpmwheels
81 # The following versions of setuptools/pip are bundled when this patch is not applied.
82 # The versions are written in Lib/ensurepip/__init__.py, this patch removes them.
83 # When the bundled setuptools/pip wheel is updated, the patch no longer applies cleanly.
84 # In such cases, the patch needs to be amended and the versions updated here:
85 %global pip_version 20.2.3
86 %global setuptools_version 49.2.1
87
88 # Expensive optimizations (mainly, profile-guided optimizations)
89 %bcond_without optimizations
90
91 # Run the test suite in %%check
92 %bcond_without tests
93
94 # Support for the GDB debugger
95 %bcond_with gdb_hooks
96
97 # The dbm.gnu module (key-value database)
98 %bcond_without gdbm
99
100 # Main interpreter loop optimization
101 %bcond_without computed_gotos
102
103 # Support for the Valgrind debugger/profiler
104 %ifarch %{valgrind_arches}
105 %bcond_without valgrind
106 %else
107 %bcond_with valgrind
108 %endif
109
110
111 # =====================
112 # General global macros
113 # =====================
114
115 %global pylibdir %{_libdir}/python%{pybasever}
116 %global dynload_dir %{pylibdir}/lib-dynload
117 %global site_packages %{pylibdir}/site-packages
118
119 # ABIFLAGS, LDVERSION and SOABI are in the upstream configure.ac
120 # See PEP 3149 for some background: http://www.python.org/dev/peps/pep-3149/
121 %global ABIFLAGS_optimized %{nil}
122
123 %global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized}
124
125 %global SOABI_optimized cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{_arch}-linux%{_gnu}
126
127 # All bytecode files are in a __pycache__ subdirectory, with a name
128 # reflecting the version of the bytecode.
129 # See PEP 3147: http://www.python.org/dev/peps/pep-3147/
130 # For example,
131 # foo/bar.py
132 # has bytecode at:
133 # foo/__pycache__/bar.cpython-%%{pyshortver}.pyc
134 # foo/__pycache__/bar.cpython-%%{pyshortver}.opt-1.pyc
135 # foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
136 %global bytecode_suffixes .cpython-%{pyshortver}*.pyc
137
138 # Disable automatic bytecompilation. The python3 binary is not yet be
139 # available in /usr/bin when Python is built. Also, the bytecompilation fails
140 # on files that test invalid syntax.
141 %global __brp_python_bytecompile %nil
142
143 %define lib_major %{pybasever}
144 %define lib_name_orig libpython%{familyver}
145 %define lib_name %mklibname python %{lib_major}
146 %define develname %mklibname python3 -d
147
148 Summary: An interpreted, interactive object-oriented programming language
149 Name: python3
150 Version: %{version}
151 Release: %mkrel %{?prerel:0.%prerel.}%{rel}
152 License: Modified CNRI Open Source License
153 Group: Development/Python
154
155 BuildRequires: automake
156 BuildRequires: gcc-c++
157 BuildRequires: blt
158 BuildRequires: pkgconfig(bluez)
159 BuildRequires: db-devel
160 BuildRequires: pkgconfig(expat)
161 BuildRequires: gdbm-devel
162 BuildRequires: gmp-devel
163 BuildRequires: pkgconfig(libffi)
164 BuildRequires: pkgconfig(libnsl)
165 BuildRequires: pkgconfig(ncursesw)
166 BuildRequires: pkgconfig(openssl) >= 1.1
167 BuildRequires: libtirpc-devel
168 BuildRequires: readline-devel
169 BuildRequires: termcap-devel
170 BuildRequires: tcl
171 BuildRequires: pkgconfig(tcl)
172 BuildRequires: tk
173 BuildRequires: pkgconfig(tk)
174 BuildRequires: autoconf
175 BuildRequires: pkgconfig(bzip2)
176 BuildRequires: pkgconfig(sqlite3)
177 BuildRequires: pkgconfig(liblzma)
178 # uncomment once the emacs part no longer conflict with python 2.X
179 #BuildRequires: emacs
180 #BuildRequires: emacs-bin
181 %if %{with valgrind}
182 BuildRequires: pkgconfig(valgrind)
183 %endif
184
185 BuildRequires: systemtap-sdt-devel
186
187 %if %{with rpmwheels}
188 BuildRequires: python-setuptools-wheel >= %{setuptools_version}
189 BuildRequires: python-pip-wheel >= %{pip_version}
190 %endif
191
192 %if %{without bootstrap}
193 # for make regen-all and distutils.tests.test_bdist_rpm
194 BuildRequires: python3
195 %endif
196
197 Source0: https://www.python.org/ftp/python/%{version}/Python-%{version}%{?prerel}.tar.xz
198 Source1: https://docs.python.org/%{pybasever}/archives/python-%{docver}%{?prerel}-docs-html.tar.bz2
199
200 # A simple script to check timestamps of bytecode files
201 # Run in check section with Python that is currently being built
202 # Originally written by bkabrda
203 Source8: check-pyc-timestamps.py
204
205 #
206 # Upstream patches
207 #
208
209 #
210 # Fedora patches
211 #
212
213 # 00001 #
214 # Fixup distutils/unixccompiler.py to remove standard library path from rpath:
215 # Was Patch0 in ivazquez' python3000 specfile:
216 Patch101: 00001-rpath.patch
217
218 # 00102 #
219 # Change the various install paths to use /usr/lib64/ instead or /usr/lib
220 # Only used when "%%{_lib}" == "lib64"
221 # Not yet sent upstream.
222 Patch102: 00102-lib64.patch
223
224 # 00111 #
225 # Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
226 # a libpythonMAJOR.MINOR.a
227 # See https://bugzilla.redhat.com/show_bug.cgi?id=556092
228 # Downstream only: not appropriate for upstream
229 Patch111: 00111-no-static-lib.patch
230
231 # 00189 #
232 # Instead of bundled wheels, use our RPM packaged wheels from
233 # /usr/share/python-wheels
234 # Downstream only: upstream bundles
235 # We might eventually pursuit upstream support, but it's low prio
236 Patch189: 00189-use-rpm-wheels.patch
237
238 # 00251
239 # Set values of prefix and exec_prefix in distutils install command
240 # to /usr/local if executable is /usr/bin/python* and RPM build
241 # is not detected to make pip and distutils install into separate location
242 # Fedora Change: https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
243 # Downstream only: Awaiting resources to work on upstream PEP
244 Patch251: 00251-change-user-install-location.patch
245
246 # 00274 #
247 # Upstream uses Debian-style architecture naming. Change to match Fedora.
248 Patch274: 00274-fix-arch-names.patch
249
250 # 00328 #
251 # Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
252 # See https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comment-27426
253 # Downstream only: only used when building RPM packages
254 # Ideally, we should talk to upstream and explain why we don't want this
255 Patch328: 00328-pyc-timestamp-invalidation-mode.patch
256
257 # (New patches go here ^^^)
258 #
259 # Mageia patches
260 #
261 Patch500: python3-3.7.1-module-linkage.patch
262 Patch501: python3-3.5.2-skip-distutils-tests-that-fail-in-rpmbuild.patch
263 Patch502: python3-3.7.1-uid-gid-overflows.patch
264 Patch503: python3-3.5.2-dont-raise-from-py_compile.patch
265 Patch506: python3-3.6.2-python3-config-LIBPLUSED-cmp0004-error.patch
266 Patch507: link-C-modules-with-libpython.patch
267
268 #
269 # Security patches 1000->...
270 #
271 # CVE-2021-3177
272 # https://github.com/python/cpython/pull/24239
273 Patch1000: d9b8f138b7df3b455b54653ca59f491b4840d6fa.patch
274
275 Provides: python(abi) = %{pybasever}
276 Provides: /usr/bin/python%{LDVERSION_optimized}
277 Provides: /usr/bin/python%{pybasever}
278 Requires: python-rpm-macros >= 3-8
279 Requires: python3-rpm-macros >= 3-8
280
281 # ease upgrade mga7->mga8, see mga#27857
282 Conflicts: python < 2.7.18-5
283 Conflicts: %{_lib}python3-devel < 3.8.1
284 Requires: %{lib_name} = %{version}-%{release}
285
286 %description
287 Python is an interpreted, interactive, object-oriented programming
288 language often compared to Tcl, Perl, Scheme or Java. Python includes
289 modules, classes, exceptions, very high level dynamic data types and
290 dynamic typing. Python supports interfaces to many system calls and
291 libraries, as well as to various windowing systems (X11, Motif, Tk,
292 Mac and MFC).
293
294 Programmers can write new built-in modules for Python in C or C++.
295 Python can be used as an extension language for applications that
296 need a programmable interface. This package contains most of the
297 standard Python modules, as well as modules for interfacing to the
298 Tix widget set for Tk and RPM.
299
300 Note that documentation for Python is provided in the python-docs
301 package.
302
303 %package -n %{lib_name}
304 Summary: Shared libraries for Python %{version}
305 Group: System/Libraries
306 Requires: %{lib_name}-stdlib = %{version}-%{release}
307
308 %description -n %{lib_name}
309 This packages contains Python shared object library. Python is an
310 interpreted, interactive, object-oriented programming language often
311 compared to Tcl, Perl, Scheme or Java.
312
313 %package -n %{lib_name}-stdlib
314 Summary: Python %{version} standard library
315 Group: Development/Python
316 %if %{with rpmwheels}
317 Requires: python-setuptools-wheel
318 Requires: python-pip-wheel
319 %else
320 Provides: bundled(python3-pip) = %{pip_version}
321 Provides: bundled(python3-setuptools) = %{setuptools_version}
322 %endif
323
324 %description -n %{lib_name}-stdlib
325 This package contains Python 3's standard library.
326 It is normally not used on its own, but as a dependency of Python %{version}.
327
328 %package -n %{lib_name}-testsuite
329 Summary: Testsuite for the Python %{version} standard library
330 Group: Development/Python
331 Provides: python3-testsuite = %{version}-%{release}
332 Requires: %{lib_name}-stdlib = %{version}-%{release}
333 Requires: %{lib_name} = %{version}-%{release}
334 Recommends: tkinter3
335
336 %description -n %{lib_name}-testsuite
337 The complete testsuite for the Python standard library.
338 It is normally not used on its own, but as a dependency of Python %{version}.
339
340 %package -n %{develname}
341 Summary: The libraries and header files needed for Python development
342 Group: Development/Python
343 Requires: %{name} = %{version}-%{release}
344 Requires: %{lib_name} = %{version}-%{release}
345 Provides: %{name}-devel = %{version}-%{release}
346 Provides: %{lib_name_orig}-devel = %{version}-%{release}
347 Conflicts: %{_lib}python-devel < 2.7.17-2
348 Recommends: %{lib_name}-testsuite
349 Recommends: %{name}-docs
350
351 %description -n %{develname}
352 The Python programming language's interpreter can be extended with
353 dynamically loaded extensions and can be embedded in other programs.
354 This package contains the header files and libraries needed to do
355 these types of tasks.
356
357 Install %{develname} if you want to develop Python extensions. The
358 python package will also need to be installed. You'll probably also
359 want to install the python-docs package, which contains Python
360 documentation.
361
362 %package docs
363 Summary: Documentation for the Python programming language
364 Requires: %{name} >= %{version}
365 Requires: xdg-utils
366 Group: Development/Python
367 BuildArch: noarch
368
369 %description docs
370 The python-docs package contains documentation on the Python
371 programming language and interpreter. The documentation is provided
372 in ASCII text files and in LaTeX source files.
373
374 Install the python-docs package if you'd like to use the documentation
375 for the Python language.
376
377 %package -n tkinter3
378 Summary: A graphical user interface for the Python scripting language
379 Group: Development/Python
380 Requires: %{name} = %{version}-%{release}
381 Requires: tcl tk
382 Provides: python3-tkinter
383
384 %description -n tkinter3
385 The Tkinter (Tk interface) program is an graphical user interface for
386 the Python scripting language.
387
388 You should install the tkinter package if you'd like to use a graphical
389 user interface for Python programming.
390
391 %package -n tkinter3-apps
392 Summary: Various applications written using tkinter
393 Group: Development/Python
394 Requires: tkinter3
395
396 %description -n tkinter3-apps
397 Various applications written using tkinter
398
399 %prep
400 %setup -qn Python-%{version}%{?prerel}
401 # Remove all exe files to ensure we are not shipping prebuilt binaries
402 # note that those are only used to create Microsoft Windows installers
403 # and that functionality is broken on Linux anyway
404 find -name '*.exe' -print -delete
405
406 # Remove bundled libraries to ensure that we're using the system copy.
407 rm -r Modules/expat
408
409 # Upstream patches
410
411 # Fedora patches
412 %patch101 -p1
413
414 %if "%{_lib}" == "lib64"
415 %patch102 -p1
416 %endif
417 %patch111 -p1
418
419 %if %{with rpmwheels}
420 %patch189 -p1
421 rm Lib/ensurepip/_bundled/*.whl
422 %endif
423
424 %patch251 -p1
425 %patch274 -p1
426 %patch328 -p1
427
428 # Mageia patches
429 #patch500 -p1
430 %patch501 -p1
431 %patch502 -p1
432 %patch503 -p1
433 %patch506 -p1
434 %patch507 -p1
435
436 %patch1000 -p1
437 # Remove files that should be generated by the build
438 # (This is after patching, so that we can use patches directly from upstream)
439 rm configure pyconfig.h.in
440
441 # drop Autoconf version requirement
442 sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
443
444 # docs
445 mkdir html
446 bzcat %{SOURCE1} | tar x -C html
447
448 find . -type f -print0 | xargs -0 perl -p -i -e 's@/usr/local/bin/python@/usr/bin/python3@'
449
450 %build
451 autoreconf -vfi
452
453 # Remove -Wl,--no-undefined in accordance with MGA #9395 :
454 # https://bugs.mageia.org/show_bug.cgi?id=9395
455 %define _disable_ld_no_undefined 1
456
457 # Get proper option names from bconds
458 %if %{with computed_gotos}
459 %global computed_gotos_flag yes
460 %else
461 %global computed_gotos_flag no
462 %endif
463
464 %if %{with optimizations}
465 %global optimizations_flag "--enable-optimizations"
466 %else
467 %global optimizations_flag "--disable-optimizations"
468 %endif
469
470 export CFLAGS="%{optflags} -D_GNU_SOURCE -fPIC -fwrapv"
471 export CFLAGS_NODIST="%{optflags} -D_GNU_SOURCE -fPIC -fwrapv -fno-semantic-interposition"
472 export CXXFLAGS="%{optflags} -D_GNU_SOURCE -fPIC -fwrapv"
473 export OPT="%{optflags} -D_GNU_SOURCE -fPIC -fwrapv"
474 export LINKCC="gcc"
475 export LDFLAGS="%{ldflags}"
476 export LDFLAGS_NODIST="%{ldflags} -fno-semantic-interposition"
477
478 %configure --host='' \
479 --enable-ipv6 \
480 --enable-shared \
481 --with-computed-gotos=%{computed_gotos_flag} \
482 --with-dbmliborder=gdbm:ndbm:bdb \
483 --with-system-expat \
484 --with-system-ffi \
485 --enable-loadable-sqlite-extensions \
486 --with-dtrace \
487 --with-lto \
488 --with-ssl-default-suites=openssl \
489 %if %{with valgrind}
490 --with-valgrind \
491 %endif
492 --with-threads \
493 --without-ensurepip \
494 %{optimizations_flag}
495
496 # (misc) if the home is nfs mounted, rmdir fails due to delay
497 export TMP="/tmp" TMPDIR="/tmp"
498
499 %if %{without bootstrap}
500 # Regenerate generated files (needs python3)
501 %make_build regen-all PYTHON_FOR_REGEN="python%{pybasever}"
502 %endif
503
504 %make_build EXTRA_CFLAGS="$CFLAGS" LN="ln -sf"
505
506 %install
507
508 %if %{with gdb_hooks}
509 DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
510 mkdir -p %{buildroot}$DirHoldingGdbPy
511 %endif # with gdb_hooks
512
513 # fix Makefile to get rid of reference to distcc
514 perl -pi -e "/^CC=/ and s/distcc/gcc/" Makefile
515
516 # set the install path
517 echo '[install_scripts]' >setup.cfg
518 echo 'install_dir='"${RPM_BUILD_ROOT}/usr/bin" >>setup.cfg
519
520 %make_install LN="ln -sf"
521
522 %if %{with gdb_hooks}
523 # See comment on $DirHoldingGdbPy above
524 PathOfGdbPy=$DirHoldingGdbPy/libpython%{pybasever}%{ABIFLAGS_optimized}-%{version}-%{release}.%{_arch}.debug-gdb.py
525 cp Tools/gdb/libpython.py %{buildroot}$PathOfGdbPy
526 %endif # with gdb_hooks
527
528 # Install directories for additional packages
529 install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
530 %if "%{_lib}" == "lib64"
531 # The 64-bit version needs to create "site-packages" in /usr/lib/ (for
532 # pure-Python modules) as well as in /usr/lib64/ (for packages with extension
533 # modules).
534 # Note that rpmlint will complain about hardcoded library path;
535 # this is intentional.
536 install -d -m 0755 %{buildroot}%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
537 %endif
538
539 # overwrite the copied binary with a link
540 pushd %{buildroot}%{_bindir}
541 #ln -sf python%{LDVERSION_optimized} python%{pybasever}
542 ln -sf python%{pybasever} python%{familyver}
543 popd
544
545 pushd %{buildroot}%{_libdir}
546 ln -sf $(ls libpython%{lib_major}*.so.*) libpython%{lib_major}.so
547 popd
548
549 # make python3 as default one
550 ln -s ./python3 %{buildroot}%{_bindir}/python
551 ln -s ./pydoc3 %{buildroot}%{_bindir}/pydoc
552 ln -s ./pygettext3.py %{buildroot}%{_bindir}/pygettext.py
553 ln -s ./msgfmt3.py %{buildroot}%{_bindir}/msgfmt.py
554 ln -s ./python3-config %{buildroot}%{_bindir}/python-config
555 ln -s ./python3.1 %{buildroot}%{_mandir}/man1/python.1
556 ln -s ./python3.pc %{buildroot}%{_libdir}/pkgconfig/python.pc
557
558 # install pynche as pynche3
559 cat << EOF > %{buildroot}%{_bindir}/pynche3
560 #!/usr/bin/bash
561 exec %{_libdir}/python%{pybasever}/site-packages/pynche/pynche
562 EOF
563 rm -f Tools/pynche/*.pyw
564 cp -r Tools/pynche %{buildroot}%{_libdir}/python%{pybasever}/site-packages/
565
566 chmod 755 %{buildroot}%{_bindir}/{idle3,pynche3}
567
568 ln -f Tools/pynche/README Tools/pynche/README.pynche
569
570 %if %{with valgrind}
571 install Misc/valgrind-python.supp -D %{buildroot}%{_libdir}/valgrind/valgrind-python3.supp
572 %endif
573
574 mkdir -p %{buildroot}%{_datadir}/applications
575 cat > %{buildroot}%{_datadir}/applications/%{_real_vendor}-tkinter3.desktop << EOF
576 [Desktop Entry]
577 Name=IDLE
578 Comment=IDE for Python3
579 Exec=%{_bindir}/idle3
580 Icon=development_environment_section
581 Terminal=false
582 Type=Application
583 Categories=Development;IDE;
584 EOF
585
586 cat > %{buildroot}%{_datadir}/applications/%{_real_vendor}-%{name}-docs.desktop << EOF
587 [Desktop Entry]
588 Name=Python documentation
589 Comment=Python complete reference
590 Exec=%{_bindir}/xdg-open %_defaultdocdir/%{name}-docs/index.html
591 Icon=documentation_section
592 Terminal=false
593 Type=Application
594 Categories=Documentation;
595 EOF
596
597 # fix non real scripts
598 #chmod 644 %{buildroot}%{_libdir}/python*/test/test_{binascii,grp,htmlparser}.py*
599 find %{buildroot} -type f \( -name "test_binascii.py*" -o -name "test_grp.py*" -o -name "test_htmlparser.py*" \) -exec chmod 644 {} \;
600
601 # fix python library not stripped
602 chmod u+w %{buildroot}%{_libdir}/libpython%{lib_major}*.so.1.0 $RPM_BUILD_ROOT%{_libdir}/libpython3.so
603
604 # Make python3-devel multilib-ready
605 mv %{buildroot}%{_includedir}/python%{LDVERSION_optimized}/pyconfig.h \
606 %{buildroot}%{_includedir}/python%{LDVERSION_optimized}/pyconfig-%{__isa_bits}.h
607 cat > %{buildroot}%{_includedir}/python%{LDVERSION_optimized}/pyconfig.h << EOF
608 #include <bits/wordsize.h>
609
610 #if __WORDSIZE == 32
611 #include "pyconfig-32.h"
612 #elif __WORDSIZE == 64
613 #include "pyconfig-64.h"
614 #else
615 #error "Unknown word size"
616 #endif
617 EOF
618
619 # Make sure distutils looks at the right pyconfig.h file
620 # See https://bugzilla.redhat.com/show_bug.cgi?id=201434
621 # Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
622 # pyconfig.h so it can be parsed, and needs to do this at runtime in site.py
623 # when python starts up (see https://bugzilla.redhat.com/show_bug.cgi?id=653058)
624 #
625 # Split this out so it goes directly to the pyconfig-32.h/pyconfig-64.h
626 # variants:
627 sed -i -e "s/'pyconfig.h'/'pyconfig-%{__isa_bits}.h'/" \
628 %{buildroot}%{pylibdir}/distutils/sysconfig.py \
629 %{buildroot}%{pylibdir}/sysconfig.py
630
631 # Install pathfix.py to bindir
632 # See https://github.com/fedora-python/python-rpm-porting/issues/24
633 cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
634
635 # Install i18n tools to bindir
636 # They are also in python2, so we version them
637 # https://bugzilla.redhat.com/show_bug.cgi?id=1571474
638 for tool in pygettext msgfmt; do
639 cp -p Tools/i18n/${tool}.py %{buildroot}%{_bindir}/${tool}%{pybasever}.py
640 ln -s ${tool}%{pybasever}.py %{buildroot}%{_bindir}/${tool}3.py
641 done
642
643 # Switch all shebangs to refer to the specific Python version.
644 # This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
645 # so handle files named using other naming scheme separately.
646 LD_LIBRARY_PATH=./ ./python \
647 Tools/scripts/pathfix.py \
648 -i "%{_bindir}/python%{pybasever}" -pn \
649 %{buildroot} \
650 %{buildroot}%{_bindir}/*%{pybasever}.py \
651 %{buildroot}%{_libdir}/python%{pybasever}/site-packages/pynche/pynche \
652 %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
653
654 # Remove shebang lines from .py files that aren't executable, and
655 # remove executability from .py files that don't have a shebang line:
656 find %{buildroot} -name \*.py \
657 \( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
658 -print -exec sed -i '1d' {} \; \) -o \( \
659 -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
660 -exec chmod a-x {} \; \) \)
661
662 # Get rid of DOS batch files:
663 find %{buildroot} -name \*.bat -exec rm {} \;
664
665 # Get rid of backup files:
666 find %{buildroot}/ -name "*~" -exec rm -f {} \;
667 find . -name "*~" -exec rm -f {} \;
668
669 # Get rid of a stray copy of the license:
670 rm -f %{buildroot}%{pylibdir}/LICENSE.txt
671
672 # Do bytecompilation with the newly installed interpreter.
673 # This is similar to the script in macros.pybytecompile
674 # compile *.pyc
675 find %{buildroot}%{_libdir}/python%{pybasever} -type f -a -name "*.py" -print0 | \
676 LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
677 PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever} %{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
678 xargs -0 %{buildroot}%{_bindir}/python%{pybasever} -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("%{buildroot}")[2], optimize=opt) for opt in range(3) for f in sys.argv[1:]]' || :
679
680 # Since we have pathfix.py in bindir, this is created, but we don't want it
681 rm -rf %{buildroot}%{_bindir}/__pycache__
682
683 # Fixup permissions for shared libraries from non-standard 555 to standard 755:
684 find %{buildroot} -perm 555 -exec chmod 755 {} \;
685
686 # make man python3.Xm work https://bugzilla.redhat.com/show_bug.cgi?id=1612241
687 ln -s ./python%{pybasever}.1 %{buildroot}%{_mandir}/man1/python%{pybasever}m.1
688
689 %if %{with tests}
690 %check
691 # (misc) if the home is nfs mounted, rmdir fails
692 export TMP="/tmp" TMPDIR="/tmp"
693
694 # Exclude some tests that hangs on the BS
695 EXCLUDE="test_ssl test_socket test_epoll"
696 %ifarch x86_64
697 EXCLUDE="$EXCLUDE test_faulthandler"
698 %endif
699 %ifarch %arm
700 EXCLUDE="$EXCLUDE test_float test_asyncio test_cmath"
701 %endif
702 # Local aarch64 tests succeeds, but fails on BS
703 %ifarch aarch64
704 EXCLUDE="$EXCLUDE test_posix test_asyncio test_openpty test_os test_pty test_readline"
705 %endif
706 # json test pass on local build but fail on BS
707 EXCLUDE="$EXCLUDE test_json"
708 # to investigate why it fails on local build
709 EXCLUDE="$EXCLUDE test_site"
710 # why this fails?
711 EXCLUDE="$EXCLUDE test_distutils"
712 # failing with 3.8RC1:
713 EXCLUDE="$EXCLUDE test___all__ test_embed test_mmap test_os"
714 # all tests must pass
715 # but we disable network on BS
716 WITHIN_PYTHON_RPM_BUILD= \
717 make test TESTOPTS="-wW --slowest -j0 -u none -x $EXCLUDE"
718 # consider use network on local build
719 #EXCLUDE=""
720 #WITHIN_PYTHON_RPM_BUILD= make test TESTOPTS="-u network -x $EXCLUDE"
721 %endif
722
723 %files
724 %{_bindir}/pathfix.py
725 %{_bindir}/pydoc
726 %{_bindir}/pydoc%{familyver}
727 %{_bindir}/pydoc%{pybasever}
728 %{_bindir}/python
729 %{_bindir}/python%{familyver}
730 %{_bindir}/python%{pybasever}
731 %{_bindir}/python%{LDVERSION_optimized}
732 %{_bindir}/2to3
733 %{_bindir}/2to3-%{pybasever}
734 %{_mandir}/man*/*
735
736 %files -n %{lib_name}-stdlib
737 %license LICENSE
738 %doc README.rst
739 %{_includedir}/python%{LDVERSION_optimized}/pyconfig-%{__isa_bits}.h
740 %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
741 %if "%{_lib}" == "lib64"
742 %dir %{_prefix}/lib/python%{pybasever}
743 %dir %{_prefix}/lib/python%{pybasever}/site-packages
744 %dir %{_prefix}/lib/python%{pybasever}/site-packages/__pycache__/
745 %endif
746 %dir %{pylibdir}
747 %dir %{dynload_dir}
748 %dir %{site_packages}
749 %dir %{site_packages}/__pycache__/
750 %{site_packages}/README.txt
751 %{pylibdir}/*.py
752 %dir %{pylibdir}/__pycache__/
753 %{pylibdir}/__pycache__/*%{bytecode_suffixes}
754
755 %dir %{pylibdir}/unittest/
756 %dir %{pylibdir}/unittest/__pycache__/
757 %{pylibdir}/unittest/*.py
758 %{pylibdir}/unittest/__pycache__/*%{bytecode_suffixes}
759
760 %dir %{pylibdir}/asyncio/
761 %dir %{pylibdir}/asyncio/__pycache__/
762 %{pylibdir}/asyncio/*.py
763 %{pylibdir}/asyncio/__pycache__/*%{bytecode_suffixes}
764
765 %dir %{pylibdir}/venv/
766 %dir %{pylibdir}/venv/__pycache__/
767 %{pylibdir}/venv/*.py
768 %{pylibdir}/venv/__pycache__/*%{bytecode_suffixes}
769 %{pylibdir}/venv/scripts
770
771 %{pylibdir}/wsgiref
772 %{pylibdir}/xml
773 %{pylibdir}/xmlrpc
774
775 %dir %{pylibdir}/ensurepip/
776 %dir %{pylibdir}/ensurepip/__pycache__/
777 %{pylibdir}/ensurepip/*.py
778 %{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
779
780 %if %{with rpmwheels}
781 %exclude %{pylibdir}/ensurepip/_bundled
782 %else
783 %dir %{pylibdir}/ensurepip/_bundled
784 %{pylibdir}/ensurepip/_bundled/*.whl
785 %endif
786
787 %dir %{pylibdir}/concurrent/
788 %dir %{pylibdir}/concurrent/__pycache__/
789 %{pylibdir}/concurrent/*.py
790 %{pylibdir}/concurrent/__pycache__/*%{bytecode_suffixes}
791
792 %dir %{pylibdir}/concurrent/futures/
793 %dir %{pylibdir}/concurrent/futures/__pycache__/
794 %{pylibdir}/concurrent/futures/*.py
795 %{pylibdir}/concurrent/futures/__pycache__/*%{bytecode_suffixes}
796
797 %{pylibdir}/pydoc_data
798
799 %dir %{pylibdir}/collections/
800 %dir %{pylibdir}/collections/__pycache__/
801 %{pylibdir}/collections/*.py
802 %{pylibdir}/collections/__pycache__/*%{bytecode_suffixes}
803
804 %dir %{pylibdir}/ctypes/
805 %dir %{pylibdir}/ctypes/__pycache__/
806 %{pylibdir}/ctypes/*.py
807 %{pylibdir}/ctypes/__pycache__/*%{bytecode_suffixes}
808 %{pylibdir}/ctypes/macholib
809
810 %{pylibdir}/curses
811
812 %dir %{pylibdir}/dbm/
813 %dir %{pylibdir}/dbm/__pycache__/
814 %{pylibdir}/dbm/*.py
815 %{pylibdir}/dbm/__pycache__/*%{bytecode_suffixes}
816
817 %dir %{pylibdir}/distutils/
818 %dir %{pylibdir}/distutils/__pycache__/
819 %{pylibdir}/distutils/*.py
820 %{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
821 %{pylibdir}/distutils/README
822 %{pylibdir}/distutils/command
823
824 %dir %{pylibdir}/email/
825 %dir %{pylibdir}/email/__pycache__/
826 %{pylibdir}/email/*.py
827 %{pylibdir}/email/__pycache__/*%{bytecode_suffixes}
828 %{pylibdir}/email/mime
829 %doc %{pylibdir}/email/architecture.rst
830
831 %{pylibdir}/encodings
832
833 %{pylibdir}/html
834 %{pylibdir}/http
835
836 %dir %{pylibdir}/importlib/
837 %dir %{pylibdir}/importlib/__pycache__/
838 %{pylibdir}/importlib/*.py
839 %{pylibdir}/importlib/__pycache__/*%{bytecode_suffixes}
840
841 %dir %{pylibdir}/json/
842 %dir %{pylibdir}/json/__pycache__/
843 %{pylibdir}/json/*.py
844 %{pylibdir}/json/__pycache__/*%{bytecode_suffixes}
845
846 %{pylibdir}/lib2to3
847 %exclude %{pylibdir}/lib2to3/tests
848
849 %{pylibdir}/logging
850 %{pylibdir}/multiprocessing
851
852 %dir %{pylibdir}/sqlite3/
853 %dir %{pylibdir}/sqlite3/__pycache__/
854 %{pylibdir}/sqlite3/*.py
855 %{pylibdir}/sqlite3/__pycache__/*%{bytecode_suffixes}
856
857 %exclude %{pylibdir}/turtle.py
858 %exclude %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
859
860 %{pylibdir}/urllib
861
862 %{dynload_dir}/_bisect.%{SOABI_optimized}.so
863 %{dynload_dir}/_bz2.%{SOABI_optimized}.so
864 %{dynload_dir}/_codecs_cn.%{SOABI_optimized}.so
865 %{dynload_dir}/_codecs_hk.%{SOABI_optimized}.so
866 %{dynload_dir}/_codecs_iso2022.%{SOABI_optimized}.so
867 %{dynload_dir}/_codecs_jp.%{SOABI_optimized}.so
868 %{dynload_dir}/_codecs_kr.%{SOABI_optimized}.so
869 %{dynload_dir}/_codecs_tw.%{SOABI_optimized}.so
870 %{dynload_dir}/_contextvars.%{SOABI_optimized}.so
871 %{dynload_dir}/_crypt.%{SOABI_optimized}.so
872 %{dynload_dir}/_csv.%{SOABI_optimized}.so
873 %{dynload_dir}/_ctypes.%{SOABI_optimized}.so
874 %{dynload_dir}/_curses.%{SOABI_optimized}.so
875 %{dynload_dir}/_curses_panel.%{SOABI_optimized}.so
876 %{dynload_dir}/_dbm.%{SOABI_optimized}.so
877 %{dynload_dir}/_decimal.%{SOABI_optimized}.so
878 %{dynload_dir}/_elementtree.%{SOABI_optimized}.so
879 %{dynload_dir}/_gdbm.%{SOABI_optimized}.so
880 %{dynload_dir}/_hashlib.%{SOABI_optimized}.so
881 %{dynload_dir}/_heapq.%{SOABI_optimized}.so
882 %{dynload_dir}/_json.%{SOABI_optimized}.so
883 %{dynload_dir}/_lsprof.%{SOABI_optimized}.so
884 %{dynload_dir}/_lzma.%{SOABI_optimized}.so
885 %{dynload_dir}/_multibytecodec.%{SOABI_optimized}.so
886 %{dynload_dir}/_multiprocessing.%{SOABI_optimized}.so
887 %{dynload_dir}/_opcode.%{SOABI_optimized}.so
888 %{dynload_dir}/_pickle.%{SOABI_optimized}.so
889 %{dynload_dir}/_posixshmem.%{SOABI_optimized}.so
890 %{dynload_dir}/_posixsubprocess.%{SOABI_optimized}.so
891 %{dynload_dir}/_queue.%{SOABI_optimized}.so
892 %{dynload_dir}/_random.%{SOABI_optimized}.so
893 %{dynload_dir}/_socket.%{SOABI_optimized}.so
894 %{dynload_dir}/_sqlite3.%{SOABI_optimized}.so
895 %{dynload_dir}/_statistics.%{SOABI_optimized}.so
896 %{dynload_dir}/_ssl.%{SOABI_optimized}.so
897 %{dynload_dir}/_struct.%{SOABI_optimized}.so
898 %{dynload_dir}/_md5.%{SOABI_optimized}.so
899 %{dynload_dir}/_sha1.%{SOABI_optimized}.so
900 %{dynload_dir}/_sha256.%{SOABI_optimized}.so
901 %{dynload_dir}/_sha512.%{SOABI_optimized}.so
902 %{dynload_dir}/_xxsubinterpreters.%{SOABI_optimized}.so
903 %{dynload_dir}/array.%{SOABI_optimized}.so
904 %{dynload_dir}/audioop.%{SOABI_optimized}.so
905 %{dynload_dir}/binascii.%{SOABI_optimized}.so
906 %{dynload_dir}/cmath.%{SOABI_optimized}.so
907 %{dynload_dir}/_datetime.%{SOABI_optimized}.so
908 %{dynload_dir}/fcntl.%{SOABI_optimized}.so
909 %{dynload_dir}/grp.%{SOABI_optimized}.so
910 %{dynload_dir}/math.%{SOABI_optimized}.so
911 %{dynload_dir}/mmap.%{SOABI_optimized}.so
912 %{dynload_dir}/nis.%{SOABI_optimized}.so
913 %{dynload_dir}/ossaudiodev.%{SOABI_optimized}.so
914 %{dynload_dir}/parser.%{SOABI_optimized}.so
915 %{dynload_dir}/pyexpat.%{SOABI_optimized}.so
916 %{dynload_dir}/readline.%{SOABI_optimized}.so
917 %{dynload_dir}/resource.%{SOABI_optimized}.so
918 %{dynload_dir}/select.%{SOABI_optimized}.so
919 %{dynload_dir}/spwd.%{SOABI_optimized}.so
920 %{dynload_dir}/syslog.%{SOABI_optimized}.so
921 %{dynload_dir}/termios.%{SOABI_optimized}.so
922 %{dynload_dir}/unicodedata.%{SOABI_optimized}.so
923 %{dynload_dir}/_uuid.%{SOABI_optimized}.so
924 %{dynload_dir}/xxlimited.%{SOABI_optimized}.so
925 %{dynload_dir}/zlib.%{SOABI_optimized}.so
926 %{dynload_dir}/_asyncio.%{SOABI_optimized}.so
927 %{dynload_dir}/_blake2.%{SOABI_optimized}.so
928 %{dynload_dir}/_sha3.%{SOABI_optimized}.so
929
930 %files -n %{lib_name}-testsuite
931 %{pylibdir}/ctypes/test
932 %{pylibdir}/distutils/tests
933 %{pylibdir}/lib2to3/tests
934 %{pylibdir}/sqlite3/test
935 %{pylibdir}/test/
936 %{pylibdir}/unittest/test
937 # These two are shipped in the main subpackage:
938 %exclude %{pylibdir}/test/test_support.py*
939 %exclude %{pylibdir}/test/__init__.py*
940 %{dynload_dir}/_ctypes_test.%{SOABI_optimized}.so
941 %{dynload_dir}/_testcapi.%{SOABI_optimized}.so
942 %{dynload_dir}/_testbuffer.%{SOABI_optimized}.so
943 %{dynload_dir}/_testimportmultiple.%{SOABI_optimized}.so
944 %{dynload_dir}/_testinternalcapi.%{SOABI_optimized}.so
945 %{dynload_dir}/_testmultiphase.%{SOABI_optimized}.so
946 %{dynload_dir}/_xxtestfuzz.%{SOABI_optimized}.so
947
948 %files -n %{lib_name}
949 %{_libdir}/libpython%{LDVERSION_optimized}.so.1*
950
951 %files -n %{develname}
952 %{_bindir}/pygettext.py
953 %{_bindir}/pygettext%{familyver}*.py
954
955 %{_bindir}/msgfmt.py
956 %{_bindir}/msgfmt%{familyver}*.py
957
958 %{_bindir}/python-config
959 %{_bindir}/python%{pybasever}-config
960 %{_bindir}/python%{LDVERSION_optimized}-config
961 %{_bindir}/python%{familyver}-config
962
963 %{_libdir}/libpython%{LDVERSION_optimized}.so
964 %{_libdir}/libpython%{pybasever}.so
965 %{_libdir}/libpython%{familyver}.so
966 %{_includedir}/python%{LDVERSION_optimized}
967 %exclude %{_includedir}/python%{LDVERSION_optimized}/pyconfig-%{__isa_bits}.h
968 %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}
969 %{_libdir}/pkgconfig/python.pc
970 %{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
971 %{_libdir}/pkgconfig/python-%{pybasever}{,-embed}.pc
972 %{_libdir}/pkgconfig/python%{familyver}{,-embed}.pc
973
974 %exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
975 %if %{with valgrind}
976 %{_libdir}/valgrind/valgrind-python3.supp
977 %endif
978
979 %files docs
980 %doc html/*/*
981 %{_datadir}/applications/%{_real_vendor}-%{name}-docs.desktop
982
983 %files -n tkinter3
984 %{pylibdir}/tkinter/
985 %{dynload_dir}/_tkinter.%{SOABI_optimized}.so
986 %{pylibdir}/idlelib
987 %{site_packages}/pynche
988 %{pylibdir}/turtle.py
989 %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
990 %dir %{pylibdir}/turtledemo
991 %{pylibdir}/turtledemo/*.py
992 %{pylibdir}/turtledemo/*.cfg
993 %dir %{pylibdir}/turtledemo/__pycache__/
994 %{pylibdir}/turtledemo/__pycache__/*%{bytecode_suffixes}
995
996 %files -n tkinter3-apps
997 %{_bindir}/idle%{familyver}
998 %{_bindir}/idle%{pybasever}
999 %{_bindir}/pynche%{familyver}
1000 %{_datadir}/applications/%{_real_vendor}-tkinter3.desktop
1001
1002 # We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from ldconfig
1003 # See https://bugzilla.redhat.com/show_bug.cgi?id=562980
1004 #
1005 # The /usr/lib/rpm/redhat/macros defines %%__debug_package to use
1006 # debugfiles.list, and it appears that everything below /usr/lib/debug and
1007 # (/usr/src/debug) gets added to this file (via LISTFILES) in
1008 # /usr/lib/rpm/find-debuginfo.sh
1009 #
1010 # Hence by installing it below /usr/lib/debug we ensure it is added to the
1011 # -debuginfo subpackage
1012 # (if it doesn't, then the rpmbuild ought to fail since the debug-gdb.py
1013 # payload file would be unpackaged)
1014
1015 # Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1476593
1016 %undefine _debuginfo_subpackages

  ViewVC Help
Powered by ViewVC 1.1.30