python38/python3.spec

456 lines
14 KiB
RPMSpec
Raw Normal View History

2014-06-22 19:45:41 +04:00
%define docver 3.4.0
%define dirver 3.4
2012-02-01 19:19:07 +04:00
%define familyver 3
%define lib_major %{dirver}
%define lib_name_orig libpython%{familyver}
%define lib_name %mklibname python %{lib_major}
%define develname %mklibname python3 -d
%ifarch %{ix86} x86_64 ppc
%bcond_without valgrind
%else
%bcond_with valgrind
%endif
Summary: An interpreted, interactive object-oriented programming language
Name: python3
2014-06-22 19:45:41 +04:00
Version: 3.4.1
2014-06-24 11:56:37 +04:00
Release: 2
2012-02-01 19:19:07 +04:00
License: Modified CNRI Open Source License
Group: Development/Python
Source: http://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
Source1: http://www.python.org/ftp/python/doc/%{docver}/python-%{docver}-docs-html.tar.bz2
Source2: python3.macros
2014-06-22 19:45:41 +04:00
Source3: pybytecompile.macros
2013-03-05 17:31:30 +04:00
Source100: %{name}.rpmlintrc
2014-01-16 06:40:02 -05:00
Source5: bdist_rpm5.py
2012-02-01 19:19:07 +04:00
2013-03-05 17:31:30 +04:00
Patch0: python-3.3.0-module-linkage.patch
Patch1: python3-3.3.0-fdr-lib64.patch
Patch2: python3-3.2.3-fdr-lib64-fix-for-test_install.patch
2014-06-22 19:45:41 +04:00
Patch3: Python-select-requires-libm.patch
Patch4: python-3.3.0b1-test-posix_fadvise.patch
Patch5: Python-nis-requires-tirpc.patch
Patch153: 00153-fix-test_gdb-noise.patch
Patch156: 00156-gdb-autoload-safepath.patch
# 00173 #
# Workaround for ENOPROTOOPT seen in bs within
# test.test_support.bind_port()
# from Fedora (rhbz#913732)
Patch173: 00173-workaround-ENOPROTOOPT-in-bind_port.patch
Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
2012-02-01 19:19:07 +04:00
URL: http://www.python.org/
Conflicts: tkinter3 < %{version}
Conflicts: %{lib_name}-devel < 3.1.2-4
Conflicts: %{develname} < 3.2.2-3
2012-02-01 19:19:07 +04:00
Requires: %{lib_name} = %{version}
BuildRequires: blt
BuildRequires: db-devel
BuildRequires: pkgconfig(expat)
2012-02-01 19:19:07 +04:00
BuildRequires: gdbm-devel
BuildRequires: gmp-devel
BuildRequires: pkgconfig(ncursesw)
BuildRequires: pkgconfig(openssl)
2012-02-01 19:19:07 +04:00
BuildRequires: readline-devel
BuildRequires: tcl tcl-devel
BuildRequires: tk tk-devel
BuildRequires: autoconf
BuildRequires: bzip2-devel
BuildRequires: pkgconfig(sqlite3)
2013-03-05 17:31:30 +04:00
BuildRequires: pkgconfig(libtirpc)
2012-02-01 19:19:07 +04:00
# uncomment once the emacs part no longer conflict with python 2.X
#BuildRequires: emacs
#BuildRequires: emacs-bin
%if %{with valgrind}
BuildRequires: valgrind-devel
%endif
Provides: %{name} = %{version}
2012-02-01 19:19:07 +04:00
Provides: python(abi) = %{dirver}
Provides: /usr/bin/python%{dirver}mu
2012-02-01 19:19:07 +04:00
%description
Python is an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level dynamic data types and
dynamic typing. Python supports interfaces to many system calls and
libraries, as well as to various windowing systems (X11, Motif, Tk,
Mac and MFC).
Programmers can write new built-in modules for Python in C or C++.
Python can be used as an extension language for applications that
need a programmable interface. This package contains most of the
standard Python modules, as well as modules for interfacing to the
Tix widget set for Tk and RPM.
Note that documentation for Python is provided in the python-docs
package.
%package -n %{lib_name}
Summary: Shared libraries for Python %{version}
Group: System/Libraries
%description -n %{lib_name}
This packages contains Python shared object library. Python is an
interpreted, interactive, object-oriented programming language often
compared to Tcl, Perl, Scheme or Java.
%package -n %{develname}
Summary: The libraries and header files needed for Python development
Group: Development/Python
Requires: %{name} = %{version}
2012-02-01 19:19:07 +04:00
Requires: %{lib_name} = %{version}
Provides: %{name}-devel = %{version}-%{release}
Provides: %{lib_name_orig}-devel = %{version}-%{release}
Obsoletes: %{_lib}python3.1-devel < %{version}
Obsoletes: %{_lib}python3.2-devel < %{version}-%{release}
%description -n %{develname}
The Python programming language's interpreter can be extended with
dynamically loaded extensions and can be embedded in other programs.
This package contains the header files and libraries needed to do
these types of tasks.
Install %{develname} if you want to develop Python extensions. The
python package will also need to be installed. You'll probably also
want to install the python-docs package, which contains Python
documentation.
%package docs
Summary: Documentation for the Python programming language
Group: Development/Python
Requires: %{name} = %{version}
Requires: xdg-utils
BuildArch: noarch
2012-02-01 19:19:07 +04:00
%description docs
The python-docs package contains documentation on the Python
programming language and interpreter. The documentation is provided
in ASCII text files and in LaTeX source files.
Install the python-docs package if you'd like to use the documentation
for the Python language.
%package -n tkinter3
Summary: A graphical user interface for the Python scripting language
Group: Development/Python
Requires: %{name} = %{version}
Requires: tcl tk
2012-02-01 19:19:07 +04:00
%description -n tkinter3
The Tkinter (Tk interface) program is an graphical user interface for
the Python scripting language.
You should install the tkinter package if you'd like to use a graphical
user interface for Python programming.
%package -n tkinter3-apps
Summary: Various applications written using tkinter
Group: Development/Python
Requires: tkinter3
2012-02-01 19:19:07 +04:00
%description -n tkinter3-apps
Various applications written using tkinter
%prep
%setup -qn Python-%{version}
2014-06-22 19:45:41 +04:00
%patch0 -p0 -b .link~
2012-02-01 19:19:07 +04:00
%if "%{_lib}" == "lib64"
2014-06-22 19:45:41 +04:00
%patch1 -p1 -b .lib64~
%patch2 -p1 -b .p2~
%endif
2014-06-22 19:45:41 +04:00
%patch3 -p1 -b .lm~
%patch4 -p1 -b .p4~
%patch5 -p1 -b .tirpc~
%patch153 -p1 -b .p153~
%patch156 -p1 -b .p156~
%patch173 -p1 -b .p173~
%patch179 -p1 -b .p179~
2012-02-01 19:19:07 +04:00
# docs
mkdir html
bzcat %{SOURCE1} | tar x -C html
find . -type f -print0 | xargs -0 perl -p -i -e 's@/usr/local/bin/python@/usr/bin/python3@'
2014-01-16 06:40:02 -05:00
cat > README.urpmi << EOF
2012-02-01 19:19:07 +04:00
Python interpreter support readline completion by default.
This is only used with the interpreter. In order to remove it,
you can :
1) unset PYTHONSTARTUP when you login
2) create a empty file \$HOME/.pythonrc.py
3) change %{_sysconfdir}/pythonrc.py
EOF
%build
rm -f Modules/Setup.local
export OPT="%{optflags} -g"
# to fix curses module build
# https://bugs.mageia.org/show_bug.cgi?id=6702
export CFLAGS="%{optflags} -I/usr/include/ncursesw"
export CPPFLAGS="%{optflags} -I/usr/include/ncursesw"
autoreconf -vfi
2012-02-01 19:19:07 +04:00
%configure2_5x --with-threads \
--enable-ipv6 \
--with-wide-unicode \
--with-dbmliborder=gdbm \
2012-02-01 19:19:07 +04:00
--enable-shared \
%if %{with valgrind}
--with-valgrind
%endif
# fix build
#perl -pi -e 's/^(LDFLAGS=.*)/$1 -lstdc++/' Makefile
# (misc) if the home is nfs mounted, rmdir fails due to delay
export TMP="/tmp" TMPDIR="/tmp"
2014-05-06 09:51:27 +04:00
make LN="ln -sf"
2012-02-01 19:19:07 +04:00
%check
# (misc) if the home is nfs mounted, rmdir fails
export TMP="/tmp" TMPDIR="/tmp"
2013-03-05 17:31:30 +04:00
# Currently (3.3.0-1), LOTS of tests fail, but python3 seems to work
# quite fine anyway. Chances are something in the testsuite itself is bogus.
#make test TESTOPTS="-w -x test_linuxaudiodev -x test_nis -x test_shutil -x test_pyexpat -x test_minidom -x test_sax -x test_string -x test_str -x test_unicode -x test_userstring -x test_bytes -x test_distutils -x test_mailbox -x test_ioctl -x test_telnetlib -x test_strtod -x test_urllib2net -x test_runpy -x test_posix -x test_robotparser -x test_numeric_tower -x test_math -x test_cmath -x test_importlib -x test_import -x test_float -x test_strtod -x test_timeout"
2012-02-01 19:19:07 +04:00
%install
mkdir -p %{buildroot}%{_prefix}/lib/python%{dirver}
2012-02-01 19:19:07 +04:00
# fix Makefile to get rid of reference to distcc
perl -pi -e "/^CC=/ and s/distcc/gcc/" Makefile
# set the install path
echo '[install_scripts]' >setup.cfg
echo 'install_dir='"%{buildroot}%{_bindir}" >>setup.cfg
2012-02-01 19:19:07 +04:00
# python is not GNU and does not know fsstd
mkdir -p %{buildroot}%{_mandir}
2012-02-01 19:19:07 +04:00
%makeinstall_std LN="ln -sf"
(cd %{buildroot}%{_libdir}; ln -sf `ls libpython%{lib_major}*.so.*` libpython%{lib_major}.so)
2012-02-01 19:19:07 +04:00
# fix files conflicting with python2.6
mv %{buildroot}%{_bindir}/2to3 %{buildroot}%{_bindir}/python3-2to3
2012-02-01 19:19:07 +04:00
# conflicts with python2
# # emacs, I use it, I want it
# mkdir -p %{buildroot}%{_datadir}/emacs/site-lisp
# install -m 644 Misc/python-mode.el %{buildroot}%{_datadir}/emacs/site-lisp
# emacs -batch -f batch-byte-compile %{buildroot}%{_datadir}/emacs/site-lisp/python-mode.el
2012-02-01 19:19:07 +04:00
#
# install -d %{buildroot}%{_sysconfdir}/emacs/site-start.d
# cat <<EOF >%{buildroot}%{_sysconfdir}/emacs/site-start.d/%{name}.el
2012-02-01 19:19:07 +04:00
# (setq auto-mode-alist (cons '("\\\\.py$" . python-mode) auto-mode-alist))
# (autoload 'python-mode "python-mode" "Mode for python files." t)
# EOF
#" this comment is just here because vim syntax higlighting is confused by the previous snippet of lisp
# install pynche as pynche3
cat << EOF > %{buildroot}%{_bindir}/pynche3
2012-02-01 19:19:07 +04:00
#!/bin/bash
exec %{_libdir}/python%{dirver}/site-packages/pynche/pynche
EOF
rm -f Tools/pynche/*.pyw
cp -r Tools/pynche %{buildroot}%{_libdir}/python%{dirver}/site-packages/
2012-02-01 19:19:07 +04:00
chmod 755 %{buildroot}%{_bindir}/{idle3,pynche3}
2012-02-01 19:19:07 +04:00
ln -f Tools/pynche/README Tools/pynche/README.pynche
%if %{with valgrind}
install Misc/valgrind-python.supp -D %{buildroot}%{_libdir}/valgrind/valgrind-python3.supp
2012-02-01 19:19:07 +04:00
%endif
mkdir -p %{buildroot}%{_datadir}/applications
2014-06-24 11:56:37 +04:00
cat > %{buildroot}%{_datadir}/applications/rosa-tkinter3.desktop << EOF
2012-02-01 19:19:07 +04:00
[Desktop Entry]
Name=IDLE
2014-06-24 11:56:37 +04:00
Name[ru]=IDLE
2012-02-01 19:19:07 +04:00
Comment=IDE for Python3
2014-06-24 11:56:37 +04:00
Comment[ru]=IDE для Python3
2012-02-01 19:19:07 +04:00
Exec=%{_bindir}/idle3
Icon=development_environment_section
Terminal=false
Type=Application
Categories=Development;IDE;
EOF
2014-06-24 11:56:37 +04:00
cat > %{buildroot}%{_datadir}/applications/rosa-%{name}-docs.desktop << EOF
2012-02-01 19:19:07 +04:00
[Desktop Entry]
Name=Python documentation
2014-06-24 11:56:37 +04:00
Name[ru]=Документация Python
2012-02-01 19:19:07 +04:00
Comment=Python complete reference
2014-06-24 11:56:37 +04:00
Comment[ru]=Полная документация Python
Exec=%{_bindir}/xdg-open %{_defaultdocdir}/%{name}-docs/index.html
2012-02-01 19:19:07 +04:00
Icon=documentation_section
Terminal=false
Type=Application
Categories=Documentation;
EOF
# fix non real scripts
#chmod 644 %{buildroot}%{_libdir}/python*/test/test_{binascii,grp,htmlparser}.py*
find %{buildroot} -type f \( -name "test_binascii.py*" -o -name "test_grp.py*" -o -name "test_htmlparser.py*" \) -exec chmod 644 {} \;
2012-02-01 19:19:07 +04:00
# fix python library not stripped
chmod u+w %{buildroot}%{_libdir}/libpython%{lib_major}*.so.1.0 %{buildroot}%{_libdir}/libpython3.so
2012-02-01 19:19:07 +04:00
mkdir -p %{buildroot}%{_sysconfdir}/profile.d/
2012-02-01 19:19:07 +04:00
cat > %{buildroot}%{_sysconfdir}/profile.d/30python.sh << 'EOF'
2012-02-01 19:19:07 +04:00
if [ -f $HOME/.pythonrc.py ] ; then
export PYTHONSTARTUP=$HOME/.pythonrc.py
else
export PYTHONSTARTUP=/etc/pythonrc.py
fi
export PYTHONDONTWRITEBYTECODE=1
EOF
cat > %{buildroot}%{_sysconfdir}/profile.d/30python.csh << 'EOF'
2012-02-01 19:19:07 +04:00
if ( -f ${HOME}/.pythonrc.py ) then
setenv PYTHONSTARTUP ${HOME}/.pythonrc.py
else
setenv PYTHONSTARTUP /etc/pythonrc.py
endif
setenv PYTHONDONTWRITEBYTECODE 1
EOF
cat > %{buildroot}%{_sysconfdir}/pythonrc.py << EOF
2012-02-01 19:19:07 +04:00
try:
# this add completion to python interpreter
import readline
import rlcompleter
# see readline man page for this
readline.parse_and_bind("set show-all-if-ambiguous on")
readline.parse_and_bind("tab: complete")
except:
pass
# you can place a file .pythonrc.py in your home to overrides this one
# but then, this file will not be sourced
EOF
%multiarch_includes %{buildroot}/usr/include/python*/pyconfig.h
2012-02-01 19:19:07 +04:00
mkdir -p %{buildroot}%{_sysconfdir}/rpm/macros.d
install -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/rpm/macros.d/
2012-02-01 19:19:07 +04:00
2014-01-16 06:40:02 -05:00
install -m644 %{SOURCE5} -D %{buildroot}%{_libdir}/python%{dirver}/distutils/command/bdist_rpm5.py
2012-02-01 19:19:07 +04:00
%files
2014-01-16 06:40:02 -05:00
%doc README.urpmi
2012-02-01 19:19:07 +04:00
# conflicts with python2.6
#%config(noreplace) %{_sysconfdir}/emacs/site-start.d/%{name}.el
%{_sysconfdir}/rpm/macros.d/*.macros
%{_sysconfdir}/profile.d/*
%config(noreplace) %{_sysconfdir}/pythonrc.py
%{_includedir}/python*/pyconfig.h
%{multiarch_includedir}/python*/pyconfig.h
2014-06-22 19:45:41 +04:00
%dir %{_libdir}/python*/config-*
2012-02-01 19:19:07 +04:00
%{_libdir}/python*/config*/Makefile
%exclude %{_libdir}/python*/site-packages/pynche
%exclude %{_libdir}/python*/lib-dynload/_tkinter.*.so
# HACK: build fails without this (TODO: investigate rpm)
%dir %{_libdir}/python*
%{_libdir}/python*/LICENSE.txt
%{_libdir}/python%{dirver}/*.py
%{_libdir}/python%{dirver}/__pycache__
2014-06-22 19:45:41 +04:00
%{_libdir}/python%{dirver}/asyncio
2013-02-19 19:40:00 +04:00
%{_libdir}/python%{dirver}/collections
2012-02-01 19:19:07 +04:00
%{_libdir}/python%{dirver}/concurrent
%{_libdir}/python%{dirver}/ctypes
%{_libdir}/python%{dirver}/curses
%{_libdir}/python%{dirver}/dbm
%{_libdir}/python%{dirver}/distutils
%{_libdir}/python%{dirver}/email
%{_libdir}/python%{dirver}/encodings
2014-06-22 19:45:41 +04:00
%{_libdir}/python%{dirver}/ensurepip
2012-02-01 19:19:07 +04:00
%{_libdir}/python%{dirver}/html
%{_libdir}/python%{dirver}/http
%{_libdir}/python%{dirver}/importlib
%{_libdir}/python%{dirver}/json
%{_libdir}/python%{dirver}/lib-dynload
%{_libdir}/python%{dirver}/lib2to3
%{_libdir}/python%{dirver}/logging
%{_libdir}/python%{dirver}/multiprocessing
2013-02-19 19:40:00 +04:00
%{_libdir}/python%{dirver}/plat-linux
2012-02-01 19:19:07 +04:00
%{_libdir}/python%{dirver}/pydoc_data
%{_libdir}/python%{dirver}/site-packages
%{_libdir}/python%{dirver}/sqlite3
%{_libdir}/python%{dirver}/turtledemo
%{_libdir}/python%{dirver}/unittest
%{_libdir}/python%{dirver}/urllib
2013-02-19 19:40:00 +04:00
%{_libdir}/python%{dirver}/venv
2012-02-01 19:19:07 +04:00
%{_libdir}/python%{dirver}/wsgiref*
%{_libdir}/python%{dirver}/xml
%{_libdir}/python%{dirver}/xmlrpc
%{_bindir}/pydoc3*
%{_bindir}/python3*
2014-06-22 19:45:41 +04:00
%{_bindir}/pyvenv
%{_bindir}/pyvenv-%{dirver}
2012-02-01 19:19:07 +04:00
%{_bindir}/2to3-%{dirver}
%exclude %{_bindir}/python*config
#%{_datadir}/emacs/site-lisp/*
%{_mandir}/man*/*
%if %{with valgrind}
%{_libdir}/valgrind/valgrind-python3.supp
%endif
2014-06-22 19:45:41 +04:00
# pip bits
%if "%{_libdir}" != "%{_prefix}/lib"
# In the %{_libdir} == %{_prefix}/lib case, those are caught by
# globs above.
%dir %{_prefix}/lib/python%{dirver}
%dir %{_prefix}/lib/python%{dirver}/site-packages
%{_prefix}/lib/python%{dirver}/site-packages/__pycache__
%{_prefix}/lib/python%{dirver}/site-packages/pkg_resources.py
%{_prefix}/lib/python%{dirver}/site-packages/easy_install.py
%{_prefix}/lib/python%{dirver}/site-packages/pip
2014-06-24 11:56:37 +04:00
# %{_prefix}/lib/python%{dirver}/site-packages/setuptools*
2014-06-22 19:45:41 +04:00
%{_prefix}/lib/python%{dirver}/site-packages/_markerlib
%{_prefix}/lib/python%{dirver}/site-packages/pip-*.dist-info
%endif
%{_bindir}/easy_install-%{dirver}
%{_bindir}/pip3
%{_bindir}/pip%{dirver}
2012-02-01 19:19:07 +04:00
%files -n %{lib_name}
%{_libdir}/libpython*.so.1*
%files -n %{develname}
%{_libdir}/libpython*.so
%{_includedir}/python*
%{_libdir}/python*/config-%{dirver}*
%{_libdir}/python*/test/
%{_bindir}/python%{dirver}*-config
%{_bindir}/python%{familyver}-config
%{_libdir}/pkgconfig/python*.pc
%exclude %{_includedir}/python*/pyconfig.h
%exclude %{_libdir}/python*/config*/Makefile
%files docs
%doc html/*/*
2014-06-24 11:56:37 +04:00
%{_datadir}/applications/rosa-%{name}-docs.desktop
2012-02-01 19:19:07 +04:00
%files -n tkinter3
%{_libdir}/python*/tkinter/
%{_libdir}/python*/idlelib
%{_libdir}/python*/site-packages/pynche
%{_libdir}/python*/lib-dynload/_tkinter.*.so
%files -n tkinter3-apps
%{_bindir}/idle3*
%{_bindir}/pynche3
2014-06-24 11:56:37 +04:00
%{_datadir}/applications/rosa-tkinter3.desktop