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

  ViewVC Help
Powered by ViewVC 1.1.30