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

  ViewVC Help
Powered by ViewVC 1.1.30