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

  ViewVC Help
Powered by ViewVC 1.1.30