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

  ViewVC Help
Powered by ViewVC 1.1.30