churchyard / rpms / python3

Forked from rpms/python3 6 years ago
Clone

Blame python3.spec

a3483f9
%global pybasever 3.1
a3483f9
%global pylibdir %{_libdir}/python%{pybasever}
4aab458
%global dynload_dir %{pylibdir}/lib-dynload
a3483f9
d5a5bf3
# Python's configure script defines SOVERSION, and this is used in the Makefile
d5a5bf3
# to determine INSTSONAME, the name of the libpython DSO:
d5a5bf3
#   LDLIBRARY='libpython$(VERSION).so'
d5a5bf3
#   INSTSONAME="$LDLIBRARY".$SOVERSION
d5a5bf3
# We mirror this here in order to make it easier to add the -gdb.py hooks.
d5a5bf3
# (if these get out of sync, the payload of the libs subpackage will fail
d5a5bf3
# and halt the build)
d5a5bf3
%global py_SOVERSION 1.0
55cf580
%global py_INSTSONAME_optimized libpython%{pybasever}.so.%{py_SOVERSION}
55cf580
%global py_INSTSONAME_debug     libpython%{pybasever}_d.so.%{py_SOVERSION}
d5a5bf3
b2154fa
%global with_gdb_hooks 1
b2154fa
c969609
%global with_systemtap 1
c969609
a3483f9
# We want to byte-compile the .py files within the packages using the new
a3483f9
# python3 binary.
a3483f9
# 
a3483f9
# Unfortunately, rpmbuild's infrastructure requires us to jump through some
a3483f9
# hoops to avoid byte-compiling with the system python 2 version:
a3483f9
#   /usr/lib/rpm/redhat/macros sets up build policy that (amongst other things)
a3483f9
# defines __os_install_post.  In particular, "brp-python-bytecompile" is
a3483f9
# invoked without an argument thus using the wrong version of python
a3483f9
# (/usr/bin/python, rather than the freshly built python), thus leading to
a3483f9
# numerous syntax errors, and incorrect magic numbers in the .pyc files.  We
a3483f9
# thus override __os_install_post to avoid invoking this script:
a3483f9
%global __os_install_post /usr/lib/rpm/redhat/brp-compress \
a3483f9
  %{!?__debug_package:/usr/lib/rpm/redhat/brp-strip %{__strip}} \
a3483f9
  /usr/lib/rpm/redhat/brp-strip-static-archive %{__strip} \
a3483f9
  /usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump} \
a3483f9
  /usr/lib/rpm/redhat/brp-python-hardlink 
a3483f9
# to remove the invocation of brp-python-bytecompile, whilst keeping the
a3483f9
# invocation of brp-python-hardlink (since this should still work for python3
a3483f9
# pyc/pyo files)
a3483f9
a3483f9
Summary: Version 3 of the Python programming language aka Python 3000
a3483f9
Name: python3
eeb0b9b
Version: %{pybasever}.2
5c9590b
Release: 10%{?dist}
a3483f9
License: Python
a3483f9
Group: Development/Languages
a3483f9
Source: http://python.org/ftp/python/%{version}/Python-%{version}.tar.bz2
a3483f9
a3483f9
# Avoid having various bogus auto-generated Provides lines for the various
a3483f9
# python c modules' SONAMEs:
a3483f9
Source1: find-provides-without-python-sonames.sh
a3483f9
%global _use_internal_dependency_generator 0
a3483f9
%global __find_provides %{SOURCE1}
a3483f9
a3483f9
# Supply various useful macros for building python 3 modules:
a3483f9
#  __python3, python3_sitelib, python3_sitearch
a3483f9
Source2: macros.python3
a3483f9
4aab458
# Supply an RPM macro "py_byte_compile" for the python3-devel subpackage
4aab458
# to enable specfiles to selectively byte-compile individual files and paths
4aab458
# with different Python runtimes as necessary:
4aab458
Source3: macros.pybytecompile
4aab458
b2154fa
# We install a collection of hooks for gdb that make it easier to debug
b2154fa
# executables linked against libpython (such as /usr/lib/python itself)
b2154fa
#
d5a5bf3
# These hooks are implemented in Python itself (though they are for the version
d5a5bf3
# of python that gdb is linked with, in this case Python 2.6)
b2154fa
#
d5a5bf3
# gdb-archer looks for them in the same path as the ELF file, with a -gdb.py suffix.
d5a5bf3
# We put them in the debuginfo package by installing them to e.g.:
b2154fa
#  /usr/lib/debug/usr/lib/libpython3.1.so.1.0.debug-gdb.py
b2154fa
#
b2154fa
# See https://fedoraproject.org/wiki/Features/EasierPythonDebugging for more
b2154fa
# information
b2154fa
#
bbd09cc
# This is the version from 
bbd09cc
#  http://bugs.python.org/issue8380
bbd09cc
#
bbd09cc
# This is Tools/gdb/libpython.py from:
bbd09cc
#  http://bugs.python.org/file16902/port-gdb7-hooks-to-py3k.patch
bbd09cc
# when applied to r80008 of the py3k branch
485fd76
Source4: python-gdb.py
b2154fa
c969609
# Systemtap tapset to make it easier to use the systemtap static probes
c969609
# (actually a template; LIBRARY_PATH will get fixed up during install)
c969609
# Written by dmalcolm; not yet sent upstream
c969609
Source5: libpython.stp
c969609
c969609
# Example systemtap script using the tapset
c969609
# Written by wcohen, mjw, dmalcolm; not yet sent upstream
c969609
Source6: systemtap-example.stp
c969609
71040c9
# Another example systemtap script that uses the tapset
71040c9
# Written by dmalcolm; not yet sent upstream
71040c9
Source7: pyfuntop.stp
71040c9
71040c9
a3483f9
Patch0: python-3.1.1-config.patch
a3483f9
a3483f9
a3483f9
# Fixup distutils/unixccompiler.py to remove standard library path from rpath:
a3483f9
# Was Patch0 in ivazquez' python3000 specfile:
a3483f9
Patch1:         Python-3.1.1-rpath.patch
a3483f9
a3483f9
# The four TestMIMEAudio tests fail due to "audiotest.au" not being packaged.
a3483f9
# It's simplest to remove them:
a3483f9
Patch3: python-3.1.1-remove-mimeaudio-tests.patch
a3483f9
a3483f9
# ImportTests.test_issue1267 in test_imp.py reads pydoc.py's shebang line and
a3483f9
# checks that it read it correctly.
a3483f9
#
a3483f9
# Since we modify the shebang lines in our packaging, we also need to modify
a3483f9
# the expected value in this test:
a3483f9
Patch4: python-3.1.1-apply-our-changes-to-expected-shebang-for-test_imp.patch
a3483f9
aa4aef2
# Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
aa4aef2
# a libpythonMAJOR.MINOR.a (bug 550692):
aa4aef2
Patch6: python-3.1.1-no-static-lib.patch
aa4aef2
1ae4dd3
# Fixup configure.in and setup.py to build against system expat library.
1ae4dd3
# Adapted from http://svn.python.org/view?view=rev&revision=77170
1ae4dd3
Patch7: python-3.1.1-with-system-expat.patch
1ae4dd3
c969609
# Systemtap support: add statically-defined probe points
c969609
# Patch based on upstream bug: http://bugs.python.org/issue4111
c969609
# fixed up by mjw and wcohen for 2.6.2, then fixed up by dmalcolm for 2.6.4
c969609
# then rewritten by mjw (attachment 390110 of rhbz 545179); ported to 3.1.1 by
c969609
# dmalcolm
c969609
Patch8: python-3.1.1-systemtap.patch
c969609
a3483f9
Patch102: python-3.1.1-lib64.patch
a3483f9
55cf580
# Patch to support building both optimized vs debug stacks DSO ABIs, sharing
55cf580
# the same .py and .pyc files, using "_d.so" to signify a debug build of an
55cf580
# extension module.
55cf580
#
55cf580
# Based on Debian's patch for the same, 
55cf580
#  http://patch-tracker.debian.org/patch/series/view/python2.6/2.6.5-2/debug-build.dpatch
55cf580
# 
55cf580
# (which was itself based on the upstream Windows build), but with some
55cf580
# changes:
55cf580
#
55cf580
#   * Debian's patch to dynload_shlib.c looks for module_d.so, then module.so,
55cf580
# but this can potentially find a module built against the wrong DSO ABI.  We
55cf580
# instead search for just module_d.so in a debug build
55cf580
#
55cf580
#   * We remove this change from configure.in's build of the Makefile:
55cf580
#   SO=$DEBUG_EXT.so
55cf580
# so that sysconfig.py:customize_compiler stays with shared_lib_extension='.so'
55cf580
# on debug builds, so that UnixCCompiler.find_library_file can find system
55cf580
# libraries (otherwise "make sharedlibs" fails to find system libraries,
55cf580
# erroneously looking e.g. for "libffi_d.so" rather than "libffi.so")
55cf580
#
55cf580
#   * We change Lib/distutils/command/build_ext.py:build_ext.get_ext_filename
55cf580
# to add the _d there, when building an extension.  This way, "make sharedlibs"
55cf580
# can build ctypes, by finding the sysmtem libffi.so (rather than failing to
55cf580
# find "libffi_d.so"), and builds the module as _ctypes_d.so
55cf580
#   
55cf580
#   * Similarly, update build_ext:get_libraries handling of Py_ENABLE_SHARED by
55cf580
# appending "_d" to the python library's name for the debug configuration
55cf580
#
55cf580
#   * We modify Modules/makesetup to add the "_d" to the generated Makefile
55cf580
# rules for the various Modules/*.so targets
55cf580
#
55cf580
# This may introduce issues when building an extension that links directly
55cf580
# against another extension (e.g. users of NumPy?), but seems more robust when
55cf580
# searching for external libraries
55cf580
#
55cf580
#   * We don't change Lib/distutils/command/build.py: build.build_purelib to
55cf580
# embed plat_specifier, leaving it as is, as pure python builds should be
55cf580
# unaffected by these differences (we'll be sharing the .py and .pyc files)
55cf580
#
55cf580
#   * We introduce DEBUG_SUFFIX as well as DEBUG_EXT:
55cf580
#     - DEBUG_EXT is used by ELF files (names and SONAMEs); it will be "_d" for
55cf580
# a debug build
55cf580
#     - DEBUG_SUFFIX is used by filesystem paths; it will be "-debug" for a
55cf580
# debug build
55cf580
#
55cf580
#   Both will be empty in an optimized build.  "_d" contains characters that
55cf580
# are valid ELF metadata, but this leads to various ugly filesystem paths (such
55cf580
# as the include path), and DEBUG_SUFFIX allows these paths to have more natural
55cf580
# names.  Changing this requires changes elsewhere in the distutils code.
55cf580
#
55cf580
#   * We add DEBUG_SUFFIX to PYTHON in the Makefile, so that the two
55cf580
# configurations build parallel-installable binaries with different names
55cf580
# ("python-debug" vs "python").
55cf580
#
55cf580
#   * Similarly, we add DEBUG_SUFFIX within python-config and
55cf580
#  python$(VERSION)-config, so that the two configuration get different paths
55cf580
#  for these.
55cf580
#
55cf580
#  * Patch runtests.sh to support supplying a value for PYTHON, so that we can
55cf580
# run the tests against each of the builds
55cf580
55cf580
Patch103: python-3.1.2-debug-build.patch
a3483f9
021b2bc
# Add configure-time support for the COUNT_ALLOCS and CALL_PROFILE options
021b2bc
# described at http://svn.python.org/projects/python/trunk/Misc/SpecialBuilds.txt
021b2bc
# so that if they are enabled, they will be in that build's pyconfig.h, so that
021b2bc
# extension modules will reliably use them
021b2bc
Patch104: python-3.1.2-more-configuration-flags.patch
021b2bc
d73e38d
# Add flags for statvfs.f_flag to the constant list in posixmodule (i.e. "os")
d73e38d
# (rhbz:553020); partially upstream as http://bugs.python.org/issue7647
d73e38d
Patch105: python-2.6.5-statvfs-f_flag-constants.patch
021b2bc
5c9590b
# This is the Modules/audioop.c part of the whitespace cleanup in r81032, to make it
5c9590b
# easier to apply subsequent security fixes:
5c9590b
Patch106: python-3.1.2-reformat-audioop.c.patch
5c9590b
5c9590b
# CVE-2010-1634: fix various integer overflow checks in the audioop module
5c9590b
# This is the difference from r81032 to r81081 (i.e r81047 and r81081)
5c9590b
Patch107: python-3.1.2-CVE-2010-1634.patch
5c9590b
5c9590b
# CVE-2010-2089: verify sizes/lengths within audioop module:
5c9590b
Patch108: python-3.1.2-CVE-2010-2089.patch
5c9590b
5c9590b
# CVE-2008-5983: the new PySys_SetArgvEx entry point from r81400 (backported to
5c9590b
# the old layout before the whitespace cleanup of release31-maint in r81033):
5c9590b
Patch109: python-3.1.2-CVE-2008-5983.patch
5c9590b
a3483f9
BuildRoot: %{_tmppath}/%{name}-%{version}-root
a3483f9
BuildRequires: readline-devel, openssl-devel, gmp-devel
a3483f9
BuildRequires: ncurses-devel, gdbm-devel, zlib-devel, expat-devel
a3483f9
BuildRequires: libGL-devel gcc-c++ libX11-devel glibc-devel
a3483f9
BuildRequires: bzip2 tar /usr/bin/find pkgconfig tcl-devel tk-devel
a3483f9
BuildRequires: tix-devel bzip2-devel sqlite-devel
a3483f9
BuildRequires: autoconf
a3483f9
BuildRequires: db4-devel >= 4.7
a3483f9
BuildRequires: libffi-devel
a3483f9
c969609
%if 0%{?with_systemtap}
c969609
BuildRequires: systemtap-sdt-devel
c969609
%global tapsetdir      /usr/share/systemtap/tapset
c969609
%endif
c969609
a3483f9
URL: http://www.python.org/
a3483f9
a3483f9
# See notes in bug 532118:
a3483f9
Provides: python(abi) = %{pybasever}
a3483f9
a3483f9
%description
a3483f9
Python 3 is a new version of the language that is incompatible with the 2.x
a3483f9
line of releases. The language is mostly the same, but many details, especially
a3483f9
how built-in objects like dictionaries and strings work, have changed
a3483f9
considerably, and a lot of deprecated features have finally been removed.
a3483f9
a3483f9
%package libs
a3483f9
Summary:        Python 3 runtime libraries
a3483f9
Group:          Development/Libraries
a3483f9
#Requires:       %{name} = %{version}-%{release}
a3483f9
a3483f9
%description libs
a3483f9
This package contains files used to embed Python 3 into applications.
a3483f9
a3483f9
%package devel
a3483f9
Summary: Libraries and header files needed for Python 3 development
a3483f9
Group: Development/Libraries
6859f23
Requires: %{name}%{?_isa} = %{version}-%{release}
a3483f9
Conflicts: %{name} < %{version}-%{release}
a3483f9
a3483f9
%description devel
a3483f9
This package contains libraries and header files used to build applications 
a3483f9
with and native libraries for Python 3
a3483f9
a3483f9
%package tools
a3483f9
Summary: A collection of tools included with Python 3
a3483f9
Group: Development/Tools
a3483f9
Requires: %{name} = %{version}-%{release}
a3483f9
Requires: %{name}-tkinter = %{version}-%{release}
a3483f9
a3483f9
%description tools
a3483f9
This package contains several tools included with Python 3
a3483f9
a3483f9
%package tkinter
a3483f9
Summary: A GUI toolkit for Python 3
a3483f9
Group: Development/Languages
a3483f9
BuildRequires:  tcl, tk
a3483f9
Requires: %{name} = %{version}-%{release}
a3483f9
a3483f9
%description tkinter
a3483f9
The Tkinter (Tk interface) program is an graphical user interface for
a3483f9
the Python scripting language.
a3483f9
a3483f9
%package test
a3483f9
Summary: The test modules from the main python 3 package
a3483f9
Group: Development/Languages
a3483f9
Requires: %{name} = %{version}-%{release}
a3483f9
Requires: %{name}-tools = %{version}-%{release}
a3483f9
a3483f9
%description test
a3483f9
The test modules from the main %{name} package.
a3483f9
These are in a separate package to save space, as they are almost never used
a3483f9
in production.
a3483f9
a3483f9
You might want to install the python3-test package if you're developing
a3483f9
python 3 code that uses more than just unittest and/or test_support.py.
a3483f9
55cf580
%package debug
55cf580
Summary: Debug version of the Python 3 runtime
55cf580
Group: Applications/System
55cf580
55cf580
# The debug build is an all-in-one package version of the regular build, and
55cf580
# shares the same .py/.pyc files and directories as the regular build.  Hence
55cf580
# we depend on all of the subpackages of the regular build:
55cf580
Requires: %{name}%{?_isa} = %{version}-%{release}
55cf580
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
55cf580
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
55cf580
Requires: %{name}-test%{?_isa} = %{version}-%{release}
55cf580
Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
55cf580
Requires: %{name}-tools%{?_isa} = %{version}-%{release}
55cf580
55cf580
%description debug
55cf580
python3-debug provides a version of the Python 3 runtime with numerous debugging
55cf580
features enabled, aimed at advanced Python users, such as developers of Python
55cf580
extension modules.
55cf580
55cf580
This version uses more memory and will be slower than the regular Python 3 build,
55cf580
but is useful for tracking down reference-counting issues, and other bugs.
55cf580
55cf580
The bytecodes are unchanged, so that .pyc files are compatible between the two
55cf580
versions of Python 3, but the debugging features mean that C/C++ extension
55cf580
modules are ABI-incompatible with those built for the standard runtime.
55cf580
55cf580
It shares installation directories with the standard Python 3 runtime, so that
55cf580
.py and .pyc files can be shared.  All compiled extension modules gain a "_d"
55cf580
suffix ("foo_d.so" rather than "foo.so") so that each Python 3 implementation
55cf580
can load its own extensions.
55cf580
a3483f9
%prep
a3483f9
%setup -q -n Python-%{version}
a3483f9
chmod +x %{SOURCE1}
6859f23
c969609
%if 0%{?with_systemtap}
c969609
# Provide an example of usage of the tapset:
c969609
cp -a %{SOURCE6} .
71040c9
cp -a %{SOURCE7} .
c969609
%endif # with_systemtap
c969609
1ae4dd3
# Ensure that we're using the system copy of various libraries, rather than
1ae4dd3
# copies shipped by upstream in the tarball:
1ae4dd3
#   Remove embedded copy of expat:
1ae4dd3
rm -r Modules/expat || exit 1
1ae4dd3
1ae4dd3
#   Remove embedded copy of libffi:
6859f23
for SUBDIR in darwin libffi libffi_arm_wince libffi_msvc libffi_osx ; do
6859f23
  rm -r Modules/_ctypes/$SUBDIR || exit 1 ;
6859f23
done
6859f23
1ae4dd3
#   Remove embedded copy of zlib:
1ae4dd3
rm -r Modules/zlib || exit 1
1ae4dd3
1ae4dd3
#
1ae4dd3
# Apply patches:
1ae4dd3
#
a3483f9
%patch0 -p1 -b .config
a3483f9
%patch1 -p1 -b .rpath
a3483f9
%patch3 -p1 -b .remove-mimeaudio-tests
a3483f9
%patch4 -p1 -b .apply-our-changes-to-expected-shebang
aa4aef2
%patch6 -p1 -b .no-static-lib
1ae4dd3
%patch7 -p1 -b .expat
c969609
%if 0%{?with_systemtap}
c969609
%patch8 -p1 -b .systemtap
c969609
%endif
a3483f9
a3483f9
%if "%{_lib}" == "lib64"
a3483f9
%patch102 -p1 -b .lib64
a3483f9
%endif
a3483f9
55cf580
%patch103 -p1 -b .debug-build
021b2bc
%patch104 -p1 -b .more-configuration-flags
55cf580
d73e38d
%patch105 -p1 -b .statvfs-f-flag-constants
55cf580
5c9590b
%patch106 -p3 -b .reformat-audioop
5c9590b
%patch107 -p3 -b .CVE-2010-1634
5c9590b
%patch108 -p1 -b .CVE-2010-2089
5c9590b
%patch109 -p1 -b .CVE-2008-5983
55cf580
a9e268f
# Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there
a9e268f
# are many differences between 2.6 and the Python 3 library.
a9e268f
#
a9e268f
# Fix up the URLs within pydoc to point at the documentation for this
a9e268f
# MAJOR.MINOR version:
a9e268f
#
a9e268f
sed --in-place \
a9e268f
    --expression="s|http://docs.python.org/library|http://docs.python.org/%{pybasever}/library|g" \
a9e268f
    Lib/pydoc.py || exit 1
a3483f9
a3483f9
%build
55cf580
topdir=$(pwd)
5c9590b
export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
5c9590b
export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
a3483f9
export CPPFLAGS="`pkg-config --cflags-only-I libffi`"
5c9590b
export OPT="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
a3483f9
export LINKCC="gcc"
a3483f9
export CFLAGS="$CFLAGS `pkg-config --cflags openssl`"
a3483f9
export LDFLAGS="$LDFLAGS `pkg-config --libs-only-L openssl`"
a3483f9
a3483f9
autoconf
c969609
c969609
# For patch 8 (systemtap), we need to get a new header for configure to use:
c969609
autoheader
c969609
55cf580
# Define a function, for how to perform a "build" of python for a given
55cf580
# configuration:
55cf580
BuildPython() {
55cf580
  ConfName=$1	      
55cf580
  BinaryName=$2
55cf580
  SymlinkName=$3
55cf580
  ExtraConfigArgs=$4
55cf580
  PathFixWithThisBinary=$5
55cf580
55cf580
  ConfDir=build/$ConfName
55cf580
55cf580
  echo STARTING: BUILD OF PYTHON FOR CONFIGURATION: $ConfName - %{_bindir}/$BinaryName
55cf580
  mkdir -p $ConfDir
55cf580
55cf580
  pushd $ConfDir
55cf580
55cf580
  # Use the freshly created "configure" script, but in the directory two above:
55cf580
  %global _configure $topdir/configure
55cf580
c969609
%configure \
c969609
  --enable-ipv6 \
c969609
  --with-wide-unicode \
c969609
  --enable-shared \
c969609
%if 0%{?with_systemtap}
c969609
  --with-dtrace \
c969609
  --with-tapset-install-dir=%{tapsetdir} \
c969609
%endif
c969609
  --with-system-ffi \
55cf580
  --with-system-expat \
55cf580
  $ExtraConfigArgs \
55cf580
  %{nil}
c969609
a3483f9
a3483f9
make OPT="$CFLAGS" %{?_smp_mflags}
a3483f9
55cf580
  popd
55cf580
  echo FINISHED: BUILD OF PYTHON FOR CONFIGURATION: $ConfDir
55cf580
}
55cf580
55cf580
# Use "BuildPython" to support building with different configurations:
55cf580
55cf580
BuildPython debug \
55cf580
  python-debug \
55cf580
  python%{pybasever}-debug \
66cf571
%ifarch %{ix86} x86_64 ppc ppc64
021b2bc
  "--with-pydebug --with-tsc --with-count-allocs --with-call-profile" \
66cf571
%else
66cf571
  "--with-pydebug --with-count-allocs --with-call-profile" \
66cf571
%endif
55cf580
  false
55cf580
55cf580
BuildPython optimized \
55cf580
  python \
55cf580
  python%{pybasever} \
55cf580
  "" \
55cf580
  true
55cf580
a3483f9
a3483f9
%install
55cf580
topdir=$(pwd)
71040c9
rm -fr %{buildroot}
71040c9
mkdir -p %{buildroot}%{_prefix} %{buildroot}%{_mandir}
a3483f9
55cf580
InstallPython() {
55cf580
55cf580
  ConfName=$1	      
55cf580
  PyInstSoName=$2
55cf580
55cf580
  ConfDir=build/$ConfName
55cf580
55cf580
  echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
55cf580
  mkdir -p $ConfDir
55cf580
55cf580
  pushd $ConfDir
55cf580
71040c9
make install DESTDIR=%{buildroot} INSTALL="install -p"
a3483f9
55cf580
55cf580
# Copy up the gdb hooks into place; the python file will be autoloaded by gdb
55cf580
# when visiting libpython.so, provided that the python file is installed to the
55cf580
# same path as the library (or its .debug file) plus a "-gdb.py" suffix, e.g:
55cf580
#  /usr/lib/debug/usr/lib64/libpython3.1.so.1.0.debug-gdb.py
55cf580
# (note that the debug path is /usr/lib/debug for both 32/64 bit)
55cf580
# 
55cf580
# Initially I tried:
55cf580
#  /usr/lib/libpython3.1.so.1.0-gdb.py
55cf580
# but doing so generated noise when ldconfig was rerun (rhbz:562980)
55cf580
#
55cf580
%if 0%{?with_gdb_hooks}
55cf580
DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
55cf580
PathOfGdbPy=$DirHoldingGdbPy/$PyInstSoName.debug-gdb.py
55cf580
55cf580
mkdir -p %{buildroot}$DirHoldingGdbPy
55cf580
cp %{SOURCE4} %{buildroot}$PathOfGdbPy
55cf580
%endif # with_gdb_hooks
55cf580
55cf580
  popd
55cf580
55cf580
  echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
55cf580
}
55cf580
55cf580
# Use "InstallPython" to support building with different configurations:
55cf580
55cf580
# Install the "debug" build first, so that we can move some files aside
55cf580
InstallPython debug \
55cf580
  %{py_INSTSONAME_debug}
55cf580
55cf580
# Now the optimized build:
55cf580
InstallPython optimized \
55cf580
  %{py_INSTSONAME_optimized}
55cf580
a3483f9
mkdir -p ${RPM_BUILD_ROOT}%{pylibdir}/site-packages
a3483f9
4aab458
mv ${RPM_BUILD_ROOT}%{_bindir}/2to3 ${RPM_BUILD_ROOT}%{_bindir}/python3-2to3
a3483f9
a3483f9
# Development tools
a3483f9
install -m755 -d ${RPM_BUILD_ROOT}%{pylibdir}/Tools
a3483f9
install Tools/README ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
cp -ar Tools/freeze ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
cp -ar Tools/i18n ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
cp -ar Tools/modulator ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
cp -ar Tools/pynche ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
cp -ar Tools/scripts ${RPM_BUILD_ROOT}%{pylibdir}/Tools/
a3483f9
a3483f9
# Documentation tools
71040c9
install -m755 -d %{buildroot}%{pylibdir}/Doc
71040c9
cp -ar Doc/tools %{buildroot}%{pylibdir}/Doc/
a3483f9
a3483f9
# Demo scripts
71040c9
cp -ar Demo %{buildroot}%{pylibdir}/
a3483f9
a3483f9
# Fix for bug #136654
71040c9
rm -f %{buildroot}%{pylibdir}/email/test/data/audiotest.au %{buildroot}%{pylibdir}/test/audiotest.au
a3483f9
a3483f9
%if "%{_lib}" == "lib64"
71040c9
install -d %{buildroot}/usr/lib/python%{pybasever}/site-packages
a3483f9
%endif
a3483f9
a3483f9
# Make python3-devel multilib-ready (bug #192747, #139911)
a3483f9
%global _pyconfig32_h pyconfig-32.h
a3483f9
%global _pyconfig64_h pyconfig-64.h
a3483f9
a3483f9
%ifarch ppc64 s390x x86_64 ia64 alpha sparc64
a3483f9
%global _pyconfig_h %{_pyconfig64_h}
a3483f9
%else
a3483f9
%global _pyconfig_h %{_pyconfig32_h}
a3483f9
%endif
55cf580
for PyIncludeDir in python%{pybasever} python%{pybasever}-debug ; do
55cf580
  mv %{buildroot}%{_includedir}/$PyIncludeDir/pyconfig.h \
55cf580
     %{buildroot}%{_includedir}/$PyIncludeDir/%{_pyconfig_h}
55cf580
  cat > %{buildroot}%{_includedir}/$PyIncludeDir/pyconfig.h << EOF
a3483f9
#include <bits/wordsize.h>
a3483f9
a3483f9
#if __WORDSIZE == 32
a3483f9
#include "%{_pyconfig32_h}"
a3483f9
#elif __WORDSIZE == 64
a3483f9
#include "%{_pyconfig64_h}"
a3483f9
#else
a3483f9
#error "Unknown word size"
a3483f9
#endif
a3483f9
EOF
55cf580
done
a3483f9
a3483f9
# Fix for bug 201434: make sure distutils looks at the right pyconfig.h file
71040c9
sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" %{buildroot}%{pylibdir}/distutils/sysconfig.py
a3483f9
a3483f9
# Switch all shebangs to refer to the specific Python version.
55cf580
LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
55cf580
  Tools/scripts/pathfix.py \
55cf580
  -i "%{_bindir}/python%{pybasever}" \
55cf580
  %{buildroot}
a3483f9
a3483f9
# Remove shebang lines from .py files that aren't executable, and
a3483f9
# remove executability from .py files that don't have a shebang line:
71040c9
find %{buildroot} -name \*.py \
a3483f9
  \( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
a3483f9
  -print -exec sed -i '1d' {} \; \) -o \( \
a3483f9
  -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
a3483f9
  -exec chmod a-x {} \; \) \)
a3483f9
a3483f9
# .xpm and .xbm files should not be executable:
71040c9
find %{buildroot} \
a3483f9
  \( -name \*.xbm -o -name \*.xpm -o -name \*.xpm.1 \) \
a3483f9
  -exec chmod a-x {} \;
a3483f9
a3483f9
# Remove executable flag from files that shouldn't have it:
a3483f9
chmod a-x \
71040c9
  %{buildroot}%{pylibdir}/Demo/comparisons/patterns \
71040c9
  %{buildroot}%{pylibdir}/distutils/tests/Setup.sample \
71040c9
  %{buildroot}%{pylibdir}/Demo/rpc/test \
71040c9
  %{buildroot}%{pylibdir}/Tools/README \
71040c9
  %{buildroot}%{pylibdir}/Demo/scripts/newslist.doc \
71040c9
  %{buildroot}%{pylibdir}/Demo/md5test/foo
a3483f9
a3483f9
# Get rid of DOS batch files:
71040c9
find %{buildroot} -name \*.bat -exec rm {} \;
a3483f9
a3483f9
# Get rid of backup files:
71040c9
find %{buildroot}/ -name "*~" -exec rm -f {} \;
a3483f9
find . -name "*~" -exec rm -f {} \;
71040c9
rm -f %{buildroot}%{pylibdir}/LICENSE.txt
a3483f9
# Junk, no point in putting in -test sub-pkg
a3483f9
rm -f ${RPM_BUILD_ROOT}/%{pylibdir}/idlelib/testcode.py*
a3483f9
a3483f9
# Get rid of stray patch file from buildroot:
71040c9
rm -f %{buildroot}%{pylibdir}/test/test_imp.py.apply-our-changes-to-expected-shebang # from patch 4
a3483f9
a3483f9
# Fix end-of-line encodings:
71040c9
find %{buildroot}/ -name \*.py -exec sed -i 's/\r//' {} \;
a3483f9
a3483f9
# Fix an encoding:
71040c9
iconv -f iso8859-1 -t utf-8 %{buildroot}/%{pylibdir}/Demo/rpc/README > README.conv && mv -f README.conv %{buildroot}/%{pylibdir}/Demo/rpc/README
a3483f9
a3483f9
# Note that 
a3483f9
#  %{pylibdir}/Demo/distutils/test2to3/setup.py
a3483f9
# is in iso-8859-1 encoding, and that this is deliberate; this is test data
a3483f9
# for the 2to3 tool, and one of the functions of the 2to3 tool is to fixup
a3483f9
# character encodings within python source code
a3483f9
a3483f9
# Do bytecompilation with the new interpreter.
a3483f9
LD_LIBRARY_PATH=. /usr/lib/rpm/brp-python-bytecompile ./python
a3483f9
a3483f9
# Fixup permissions for shared libraries from non-standard 555 to standard 755:
71040c9
find %{buildroot} \
a3483f9
    -perm 555 -exec chmod 755 {} \;
a3483f9
71040c9
mkdir -p %{buildroot}/%{_sysconfdir}/rpm
71040c9
install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
71040c9
install -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/rpm
a3483f9
113725a
# Ensure that the curses module was linked against libncursesw.so, rather than
113725a
# libncurses.so (bug 539917)
71040c9
ldd %{buildroot}/%{dynload_dir}/_curses*.so \
113725a
    | grep curses \
113725a
    | grep libncurses.so && (echo "_curses.so linked against libncurses.so" ; exit 1)
113725a
55cf580
# Ensure that the debug modules are linked against the debug libpython, and
55cf580
# likewise for the optimized modules and libpython:
55cf580
for Module in %{buildroot}/%{dynload_dir}/*.so ; do
55cf580
    case $Module in
55cf580
    *_d.so)
55cf580
        ldd $Module | grep %{py_INSTSONAME_optimized} &&
55cf580
            (echo Debug module $Module linked against optimized %{py_INSTSONAME_optimized} ; exi 1)
55cf580
            
55cf580
        ;;
55cf580
    *)
55cf580
        ldd $Module | grep %{py_INSTSONAME_debug} &&
55cf580
            (echo Optimized module $Module linked against debug %{py_INSTSONAME_optimized} ; exi 1)
55cf580
        ;;
55cf580
    esac
55cf580
done
b2154fa
c969609
#
c969609
# Systemtap hooks:
c969609
#
c969609
%if 0%{?with_systemtap}
c969609
# Install a tapset for this libpython into tapsetdir, fixing up the path to the
c969609
# library:
c969609
mkdir -p %{buildroot}%{tapsetdir}
c969609
%ifarch ppc64 s390x x86_64 ia64 alpha sparc64
55cf580
%global libpython_stp_optimized libpython%{pybasever}-64.stp
55cf580
%global libpython_stp_debug     libpython%{pybasever}-debug-64.stp
c969609
%else
55cf580
%global libpython_stp_optimized libpython%{pybasever}-32.stp
55cf580
%global libpython_stp_debug     libpython%{pybasever}-debug-32.stp
c969609
%endif
c969609
c969609
sed \
55cf580
   -e "s|LIBRARY_PATH|%{_libdir}/%{py_INSTSONAME_optimized}|" \
55cf580
   %{SOURCE6} \
55cf580
   > %{buildroot}%{tapsetdir}/%{libpython_stp_optimized}
55cf580
55cf580
sed \
55cf580
   -e "s|LIBRARY_PATH|%{_libdir}/%{py_INSTSONAME_debug}|" \
55cf580
   %{SOURCE6} \
55cf580
   > %{buildroot}%{tapsetdir}/%{libpython_stp_debug}
55cf580
c969609
%endif # with_systemtap
c969609
a3483f9
%check
55cf580
topdir=$(pwd)
55cf580
CheckPython() {
55cf580
  ConfName=$1	      
55cf580
  ConfDir=build/$ConfName
55cf580
55cf580
  echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
55cf580
a3483f9
# Run the upstream test suite, using the "runtests.sh" harness from the upstream
a3483f9
# tarball.
bbd09cc
# I'm seeing occasional hangs in some http tests when running the test suite
bbd09cc
# inside Koji.  For that reason I exclude them
55cf580
55cf580
LD_LIBRARY_PATH=$ConfDir PYTHON=$ConfDir/python $topdir/runtests.sh -x test_httplib test_http_cookies
a3483f9
a3483f9
# Note that we're running the tests using the version of the code in the builddir,
a3483f9
# not in the buildroot.
a3483f9
a3483f9
# The harness only emits the names of the test scripts it ran, along with a
a3483f9
# summary of the form:
a3483f9
#   2 BAD
a3483f9
# 313 GOOD
a3483f9
#  22 SKIPPED
a3483f9
# 337 total
a3483f9
# As a byproduct it writes files "GOOD", "BAD", "SKIPPED", listing names of
a3483f9
# files (e.g. "test_imp") along with a subdirectory OUT containing files of the
a3483f9
# form $TEST.out
a3483f9
# Each such logfile starts with a line indicating the name of the test
a3483f9
a3483f9
# Output the logs from failing tests, so that they are captured in the rpmbuild
a3483f9
# log:
a3483f9
for TESTNAME in $(cat BAD); do
a3483f9
  cat OUT/$TESTNAME.out ; 
a3483f9
done
a3483f9
a3483f9
# There are 5 expected BAD results here:
a3483f9
#
a3483f9
# (1) test_distutils.py: tries to build an RPM inside the rpmbuild; I'll simply
a3483f9
# let this one fail for now (has trouble linking against -lpython3.1; perhaps
a3483f9
# LD_LIBRARY_PATH is being discarded somewhere?)
a3483f9
#
a3483f9
# (2) test_imp.py: ImportTests.test_issue1267 in test_imp.py reads pydoc.py's
a3483f9
# shebang line and checks that it read it correctly.tests that the shebang line
a3483f9
# is as expected.  Unfortunately if we patch this up in the buildir (in the
a3483f9
# build phase), then the "make install" will try to reference
a3483f9
# /usr/bin/python%{pybasever} which won't exist on a clean build environment.
a3483f9
# So we fix up the shebang lines after this in the install phase, and expect
a3483f9
# this test to fail in the check phase.  It ought to pass when run on the built
a3483f9
# RPMs
a3483f9
#
a3483f9
# (3) test_socket.py:testSockName can fail here if DNS isn't properly set up:
a3483f9
#     my_ip_addr = socket.gethostbyname(socket.gethostname())
a3483f9
# socket.gaierror: [Errno -2] Name or service not known
a3483f9
#
a3483f9
# (4) test_subprocess: merely get "errors occurred"
a3483f9
#
a3483f9
# (5) test_telnet: can get a "socket.error: [Errno 104] Connection reset by peer"
a3483f9
#
a3483f9
# Some additional tests fail when running the test suite as non-root outside of
a3483f9
# the build, due to permissions issues.
a3483f9
55cf580
  echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfDir
55cf580
55cf580
}
55cf580
55cf580
# Check each of the configurations:
55cf580
CheckPython debug
55cf580
CheckPython optimized
55cf580
55cf580
a3483f9
%clean
71040c9
rm -fr %{buildroot}
a3483f9
a3483f9
%post libs -p /sbin/ldconfig
a3483f9
a3483f9
%postun libs -p /sbin/ldconfig
a3483f9
4aab458
%files
a3483f9
%defattr(-, root, root)
a3483f9
%doc LICENSE README
a3483f9
%{_bindir}/pydoc*
a3483f9
%{_bindir}/python3
a3483f9
%{_bindir}/python%{pybasever}
a3483f9
%{_mandir}/*/*
a3483f9
%dir %{pylibdir}
4aab458
%dir %{dynload_dir}
4aab458
%{dynload_dir}/Python-%{version}-py%{pybasever}.egg-info
4aab458
%{dynload_dir}/_bisectmodule.so
4aab458
%{dynload_dir}/_codecs_cn.so
4aab458
%{dynload_dir}/_codecs_hk.so
4aab458
%{dynload_dir}/_codecs_iso2022.so
4aab458
%{dynload_dir}/_codecs_jp.so
4aab458
%{dynload_dir}/_codecs_kr.so
4aab458
%{dynload_dir}/_codecs_tw.so
4aab458
%{dynload_dir}/_collectionsmodule.so
4aab458
%{dynload_dir}/_csv.so
4aab458
%{dynload_dir}/_ctypes.so
4aab458
%{dynload_dir}/_curses.so
4aab458
%{dynload_dir}/_curses_panel.so
4aab458
%{dynload_dir}/_dbm.so
4aab458
%{dynload_dir}/_elementtree.so
4aab458
%{dynload_dir}/_gdbmmodule.so
4aab458
%{dynload_dir}/_hashlib.so
4aab458
%{dynload_dir}/_heapqmodule.so
4aab458
%{dynload_dir}/_json.so
4aab458
%{dynload_dir}/_lsprof.so
4aab458
%{dynload_dir}/_multibytecodecmodule.so
4aab458
%{dynload_dir}/_multiprocessing.so
4aab458
%{dynload_dir}/_pickle.so
4aab458
%{dynload_dir}/_randommodule.so
4aab458
%{dynload_dir}/_sha1module.so
4aab458
%{dynload_dir}/_sha256module.so
4aab458
%{dynload_dir}/_sha512module.so
4aab458
%{dynload_dir}/_socketmodule.so
4aab458
%{dynload_dir}/_sqlite3.so
4aab458
%{dynload_dir}/_ssl.so
4aab458
%{dynload_dir}/_struct.so
4aab458
%{dynload_dir}/_weakref.so
4aab458
%{dynload_dir}/arraymodule.so
4aab458
%{dynload_dir}/atexitmodule.so
4aab458
%{dynload_dir}/audioop.so
4aab458
%{dynload_dir}/binascii.so
4aab458
%{dynload_dir}/bz2.so
4aab458
%{dynload_dir}/cmathmodule.so
4aab458
%{dynload_dir}/cryptmodule.so
4aab458
%{dynload_dir}/datetime.so
4aab458
%{dynload_dir}/fcntlmodule.so
4aab458
%{dynload_dir}/grpmodule.so
4aab458
%{dynload_dir}/itertoolsmodule.so
4aab458
%{dynload_dir}/mathmodule.so
4aab458
%{dynload_dir}/mmapmodule.so
4aab458
%{dynload_dir}/nismodule.so
4aab458
%{dynload_dir}/operator.so
4aab458
%{dynload_dir}/ossaudiodev.so
4aab458
%{dynload_dir}/parsermodule.so
4aab458
%{dynload_dir}/pyexpat.so
4aab458
%{dynload_dir}/readline.so
4aab458
%{dynload_dir}/resource.so
4aab458
%{dynload_dir}/selectmodule.so
4aab458
%{dynload_dir}/spwdmodule.so
4aab458
%{dynload_dir}/syslogmodule.so
4aab458
%{dynload_dir}/termios.so
4aab458
%{dynload_dir}/timemodule.so
4aab458
%{dynload_dir}/unicodedata.so
4aab458
%{dynload_dir}/xxsubtype.so
4aab458
%{dynload_dir}/zlibmodule.so
4aab458
a3483f9
%dir %{pylibdir}/site-packages
a3483f9
%{pylibdir}/site-packages/README
a3483f9
%{pylibdir}/*.py*
a3483f9
%{pylibdir}/*.doc
a3483f9
%{pylibdir}/wsgiref.egg-info
a3483f9
%dir %{pylibdir}/ctypes
a3483f9
%{pylibdir}/ctypes/*.py*
a3483f9
%{pylibdir}/ctypes/macholib
a3483f9
%{pylibdir}/curses
a3483f9
%dir %{pylibdir}/dbm
a3483f9
%{pylibdir}/dbm/*.py*
a3483f9
%dir %{pylibdir}/distutils
a3483f9
%{pylibdir}/distutils/*.py*
a3483f9
%{pylibdir}/distutils/README
a3483f9
%{pylibdir}/distutils/command
a3483f9
%dir %{pylibdir}/email
a3483f9
%{pylibdir}/email/*.py*
a3483f9
%{pylibdir}/email/mime
a3483f9
%{pylibdir}/encodings
a3483f9
%{pylibdir}/html
a3483f9
%{pylibdir}/http
a3483f9
%{pylibdir}/idlelib
a3483f9
%dir %{pylibdir}/importlib
a3483f9
%{pylibdir}/importlib/*.py*
a3483f9
%dir %{pylibdir}/json
a3483f9
%{pylibdir}/json/*.py*
6a82c19
%{pylibdir}/lib2to3
6a82c19
%exclude %{pylibdir}/lib2to3/tests
a3483f9
%{pylibdir}/logging
a3483f9
%{pylibdir}/multiprocessing
a3483f9
%{pylibdir}/plat-linux2
a3483f9
%{pylibdir}/pydoc_data
a3483f9
%dir %{pylibdir}/sqlite3
a3483f9
%{pylibdir}/sqlite3/*.py*
a3483f9
%dir %{pylibdir}/test
a3483f9
%{pylibdir}/test/__init__.py*
a3483f9
%{pylibdir}/urllib
a3483f9
%{pylibdir}/wsgiref
a3483f9
%{pylibdir}/xml
a3483f9
%{pylibdir}/xmlrpc
a3483f9
%if "%{_lib}" == "lib64"
37de674
%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}
37de674
%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages
a3483f9
%endif
a3483f9
a3483f9
# "Makefile" and the config-32/64.h file are needed by
a3483f9
# distutils/sysconfig.py:_init_posix(), so we include them in the core
a3483f9
# package, along with their parent directories (bug 531901):
a3483f9
%dir %{pylibdir}/config
a3483f9
%{pylibdir}/config/Makefile
37de674
%dir %{_includedir}/python%{pybasever}
37de674
%{_includedir}/python%{pybasever}/%{_pyconfig_h}
a3483f9
a3483f9
%files libs
a3483f9
%defattr(-,root,root,-)
55cf580
%{_libdir}/%{py_INSTSONAME_optimized}
c969609
%if 0%{?with_systemtap}
55cf580
%{tapsetdir}/%{libpython_stp_optimized}
71040c9
%doc systemtap-example.stp pyfuntop.stp
c969609
%endif
a3483f9
a3483f9
%files devel
a3483f9
%defattr(-,root,root)
a3483f9
%{pylibdir}/config/*
a3483f9
%exclude %{pylibdir}/config/Makefile
a3483f9
/usr/include/python%{pybasever}/*.h
a3483f9
%exclude /usr/include/python%{pybasever}/%{_pyconfig_h}
a3483f9
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
a3483f9
%{_bindir}/python3-config
a3483f9
%{_bindir}/python%{pybasever}-config
a3483f9
%{_libdir}/libpython%{pybasever}.so
55cf580
%{_libdir}/pkgconfig/python-%{pybasever}.pc
55cf580
%{_libdir}/pkgconfig/python3.pc
a3483f9
%config(noreplace) %{_sysconfdir}/rpm/macros.python3
4aab458
%config(noreplace) %{_sysconfdir}/rpm/macros.pybytecompile
a3483f9
a3483f9
%files tools
a3483f9
%defattr(-,root,root,755)
4aab458
%{_bindir}/python3-2to3
a3483f9
%{_bindir}/idle*
a3483f9
%{pylibdir}/Tools
a3483f9
%doc %{pylibdir}/Demo
a3483f9
%exclude %{pylibdir}/Demo/distutils
a3483f9
%exclude %{pylibdir}/Demo/md5test
a3483f9
%doc %{pylibdir}/Doc
a3483f9
a3483f9
%files tkinter
a3483f9
%defattr(-,root,root,755)
a3483f9
%{pylibdir}/tkinter
a3483f9
%exclude %{pylibdir}/tkinter/test
4aab458
%{dynload_dir}/_tkinter.so
a3483f9
a3483f9
%files test
a3483f9
%defattr(-, root, root)
a3483f9
%{pylibdir}/ctypes/test
a3483f9
%{pylibdir}/distutils/tests
a3483f9
%{pylibdir}/email/test
a3483f9
%{pylibdir}/importlib/test
a3483f9
%{pylibdir}/json/tests
a3483f9
%{pylibdir}/sqlite3/test
a3483f9
%{pylibdir}/test
4aab458
%{dynload_dir}/_ctypes_test.so
4aab458
%{dynload_dir}/_testcapimodule.so
a3483f9
%{pylibdir}/lib2to3/tests
a3483f9
%doc %{pylibdir}/Demo/distutils
a3483f9
%doc %{pylibdir}/Demo/md5test
a3483f9
%{pylibdir}/tkinter/test
a3483f9
55cf580
55cf580
# We don't bother splitting the debug build out into further subpackages:
55cf580
# if you need it, you're probably a developer.
55cf580
55cf580
# Hence the manifest is the combination of analogous files in the manifests of
55cf580
# all of the other subpackages
55cf580
55cf580
%files debug
55cf580
%defattr(-,root,root,-)
55cf580
55cf580
# Analog of the core subpackage's files:
55cf580
%{_bindir}/python3-debug
55cf580
%{_bindir}/python%{pybasever}-debug
55cf580
55cf580
# ...with debug builds of the built-in "extension" modules:
55cf580
%{dynload_dir}/_bisectmodule_d.so
55cf580
%{dynload_dir}/_codecs_cn_d.so
55cf580
%{dynload_dir}/_codecs_hk_d.so
55cf580
%{dynload_dir}/_codecs_iso2022_d.so
55cf580
%{dynload_dir}/_codecs_jp_d.so
55cf580
%{dynload_dir}/_codecs_kr_d.so
55cf580
%{dynload_dir}/_codecs_tw_d.so
55cf580
%{dynload_dir}/_collectionsmodule_d.so
55cf580
%{dynload_dir}/_csv_d.so
55cf580
%{dynload_dir}/_ctypes_d.so
55cf580
%{dynload_dir}/_curses_d.so
55cf580
%{dynload_dir}/_curses_panel_d.so
55cf580
%{dynload_dir}/_dbm_d.so
55cf580
%{dynload_dir}/_elementtree_d.so
55cf580
%{dynload_dir}/_gdbmmodule_d.so
55cf580
%{dynload_dir}/_hashlib_d.so
55cf580
%{dynload_dir}/_heapqmodule_d.so
55cf580
%{dynload_dir}/_json_d.so
55cf580
%{dynload_dir}/_lsprof_d.so
55cf580
%{dynload_dir}/_multibytecodecmodule_d.so
55cf580
%{dynload_dir}/_multiprocessing_d.so
55cf580
%{dynload_dir}/_pickle_d.so
55cf580
%{dynload_dir}/_randommodule_d.so
55cf580
%{dynload_dir}/_sha1module_d.so
55cf580
%{dynload_dir}/_sha256module_d.so
55cf580
%{dynload_dir}/_sha512module_d.so
55cf580
%{dynload_dir}/_socketmodule_d.so
55cf580
%{dynload_dir}/_sqlite3_d.so
55cf580
%{dynload_dir}/_ssl_d.so
55cf580
%{dynload_dir}/_struct_d.so
55cf580
%{dynload_dir}/_weakref_d.so
55cf580
%{dynload_dir}/arraymodule_d.so
55cf580
%{dynload_dir}/atexitmodule_d.so
55cf580
%{dynload_dir}/audioop_d.so
55cf580
%{dynload_dir}/binascii_d.so
55cf580
%{dynload_dir}/bz2_d.so
55cf580
%{dynload_dir}/cmathmodule_d.so
55cf580
%{dynload_dir}/cryptmodule_d.so
55cf580
%{dynload_dir}/datetime_d.so
55cf580
%{dynload_dir}/fcntlmodule_d.so
55cf580
%{dynload_dir}/grpmodule_d.so
55cf580
%{dynload_dir}/itertoolsmodule_d.so
55cf580
%{dynload_dir}/mathmodule_d.so
55cf580
%{dynload_dir}/mmapmodule_d.so
55cf580
%{dynload_dir}/nismodule_d.so
55cf580
%{dynload_dir}/operator_d.so
55cf580
%{dynload_dir}/ossaudiodev_d.so
55cf580
%{dynload_dir}/parsermodule_d.so
55cf580
%{dynload_dir}/pyexpat_d.so
55cf580
%{dynload_dir}/readline_d.so
55cf580
%{dynload_dir}/resource_d.so
55cf580
%{dynload_dir}/selectmodule_d.so
55cf580
%{dynload_dir}/spwdmodule_d.so
55cf580
%{dynload_dir}/syslogmodule_d.so
55cf580
%{dynload_dir}/termios_d.so
55cf580
%{dynload_dir}/timemodule_d.so
55cf580
%{dynload_dir}/unicodedata_d.so
55cf580
%{dynload_dir}/xxsubtype_d.so
55cf580
%{dynload_dir}/zlibmodule_d.so
55cf580
55cf580
# No need to split things out the "Makefile" and the config-32/64.h file as we
55cf580
# do for the regular build above (bug 531901), since they're all in one package
55cf580
# now; they're listed below, under "-devel":
55cf580
55cf580
# Analog of the -libs subpackage's files:
55cf580
%{_libdir}/%{py_INSTSONAME_debug}
55cf580
%if 0%{?with_systemtap}
55cf580
%{tapsetdir}/%{libpython_stp_debug}
55cf580
%endif
55cf580
55cf580
# Analog of the -devel subpackage's files:
55cf580
%dir %{pylibdir}/config-debug
55cf580
%{pylibdir}/config-debug/*
55cf580
%{_includedir}/python%{pybasever}-debug/*.h
55cf580
%{_bindir}/python3-debug-config
55cf580
%{_bindir}/python%{pybasever}-debug-config
55cf580
%{_libdir}/libpython%{pybasever}_d.so
55cf580
%{_libdir}/pkgconfig/python-%{pybasever}-debug.pc
55cf580
%{_libdir}/pkgconfig/python3-debug.pc
55cf580
55cf580
# Analog of the -tools subpackage's files:
55cf580
#  None for now; we could build precanned versions that have the appropriate
55cf580
# shebang if needed
55cf580
55cf580
# Analog  of the tkinter subpackage's files:
55cf580
%{dynload_dir}/_tkinter_d.so
55cf580
55cf580
# Analog  of the -test subpackage's files:
55cf580
%{dynload_dir}/_ctypes_test_d.so
55cf580
%{dynload_dir}/_testcapimodule_d.so
55cf580
d5a5bf3
# We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from
d5a5bf3
# ldconfig (rhbz:562980).
d5a5bf3
# 
d5a5bf3
# The /usr/lib/rpm/redhat/macros defines %__debug_package to use
d5a5bf3
# debugfiles.list, and it appears that everything below /usr/lib/debug and
d5a5bf3
# (/usr/src/debug) gets added to this file (via LISTFILES) in
d5a5bf3
# /usr/lib/rpm/find-debuginfo.sh
d5a5bf3
# 
d5a5bf3
# Hence by installing it below /usr/lib/debug we ensure it is added to the
d5a5bf3
# -debuginfo subpackage
d5a5bf3
# (if it doesn't, then the rpmbuild ought to fail since the debug-gdb.py 
d5a5bf3
# payload file would be unpackaged)
d5a5bf3
d5a5bf3
a3483f9
%changelog
5c9590b
* Fri Jun  4 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-10
5c9590b
- ensure that the compiler is invoked with "-fwrapv" (rhbz#594819)
5c9590b
- reformat whitespace in audioop.c (patch 106)
5c9590b
- CVE-2010-1634: fix various integer overflow checks in the audioop
5c9590b
module (patch 107)
5c9590b
- CVE-2010-2089: further checks within the audioop module (patch 108)
5c9590b
- CVE-2008-5983: the new PySys_SetArgvEx entry point from r81399 (patch 109)
5c9590b
66cf571
* Thu May 27 2010 Dan HorĂ¡k <dan[at]danny.cz> - 3.1.2-9
66cf571
- reading the timestamp counter is available only on some arches (see Python/ceval.c)
66cf571
d73e38d
* Wed May 26 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-8
d73e38d
- add flags for statvfs.f_flag to the constant list in posixmodule (i.e. "os")
d73e38d
(patch 105)
d73e38d
021b2bc
* Tue May 25 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-7
021b2bc
- add configure-time support for COUNT_ALLOCS and CALL_PROFILE debug options
021b2bc
(patch 104); enable them and the WITH_TSC option within the debug build
021b2bc
55cf580
* Mon May 24 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-6
55cf580
- build and install two different configurations of Python 3: debug and
55cf580
standard, packaging the debug build in a new "python3-debug" subpackage
55cf580
(patch 103)
55cf580
bbd09cc
* Tue Apr 13 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-5
bbd09cc
- exclude test_http_cookies when running selftests, due to hang seen on
bbd09cc
http://koji.fedoraproject.org/koji/taskinfo?taskID=2088463 (cancelled after
bbd09cc
11 hours)
bbd09cc
- update python-gdb.py from v5 to py3k version submitted upstream
bbd09cc
80325d9
* Wed Mar 31 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-4
80325d9
- update python-gdb.py from v4 to v5 (improving performance and stability,
80325d9
adding commands)
80325d9
da0826a
* Thu Mar 25 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-3
da0826a
- update python-gdb.py from v3 to v4 (fixing infinite recursion on reference
da0826a
cycles and tracebacks on bytes 0x80-0xff in strings, adding handlers for sets
da0826a
and exceptions)
da0826a
485fd76
* Wed Mar 24 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-2
485fd76
- refresh gdb hooks to v3 (reworking how they are packaged)
485fd76
eeb0b9b
* Sun Mar 21 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.2-1
eeb0b9b
- update to 3.1.2: http://www.python.org/download/releases/3.1.2/
eeb0b9b
- drop upstreamed patch 2 (.pyc permissions handling)
eeb0b9b
- drop upstream patch 5 (fix for the test_tk and test_ttk_* selftests)
eeb0b9b
- drop upstreamed patch 200 (path-fixing script)
eeb0b9b
536a207
* Sat Mar 20 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-28
536a207
- fix typo in libpython.stp (rhbz:575336)
536a207
71040c9
* Fri Mar 12 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-27
71040c9
- add pyfuntop.stp example (source 7)
71040c9
- convert usage of $$RPM_BUILD_ROOT to %%{buildroot} throughout, for
71040c9
consistency with python.spec
71040c9
3d86c8f
* Mon Feb 15 2010 Thomas Spura <tomspur@fedoraproject.org> - 3.1.1-26
3d86c8f
- rebuild for new package of redhat-rpm-config (rhbz:564527)
3d86c8f
- use 'install -p' when running 'make install'
3d86c8f
c969609
* Fri Feb 12 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-25
c969609
- split configure options into multiple lines for easy of editing
c969609
- add systemtap static markers (wcohen, mjw, dmalcolm; patch 8), a systemtap
c969609
tapset defining "python.function.entry" and "python.function.return" to make
c969609
the markers easy to use (dmalcolm; source 5), and an example of using the
c969609
tapset to the docs (dmalcolm; source 6) (rhbz:545179)
c969609
d5a5bf3
* Mon Feb  8 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-24
d5a5bf3
- move the -gdb.py file from %%{_libdir}/INSTSONAME-gdb.py to
d5a5bf3
%%{_prefix}/lib/debug/%%{_libdir}/INSTSONAME.debug-gdb.py to avoid noise from
d5a5bf3
ldconfig (bug 562980), and which should also ensure it becomes part of the
d5a5bf3
debuginfo subpackage, rather than the libs subpackage
d5a5bf3
- introduce %%{py_SOVERSION} and %%{py_INSTSONAME} to reflect the upstream
d5a5bf3
configure script, and to avoid fragile scripts that try to figure this out
d5a5bf3
dynamically (e.g. for the -gdb.py change)
d5a5bf3
b2154fa
* Mon Feb  8 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-23
b2154fa
- add gdb hooks for easier debugging (Source 4)
b2154fa
1ae4dd3
* Thu Jan 28 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-22
1ae4dd3
- update python-3.1.1-config.patch to remove downstream customization of build
1ae4dd3
of pyexpat and elementtree modules
1ae4dd3
- add patch adapted from upstream (patch 7) to add support for building against
1ae4dd3
system expat; add --with-system-expat to "configure" invocation
1ae4dd3
- remove embedded copies of expat and zlib from source tree during "prep"
1ae4dd3
4aab458
* Mon Jan 25 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-21
4aab458
- introduce %%{dynload_dir} macro
4aab458
- explicitly list all lib-dynload files, rather than dynamically gathering the
4aab458
payload into a temporary text file, so that we can be sure what we are
4aab458
shipping
4aab458
- introduce a macros.pybytecompile source file, to help with packaging python3
4aab458
modules (Source3; written by Toshio)
4aab458
- rename "2to3-3" to "python3-2to3" to better reflect python 3 module packaging
4aab458
plans
4aab458
113725a
* Mon Jan 25 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-20
113725a
- change python-3.1.1-config.patch to remove our downstream change to curses
113725a
configuration in Modules/Setup.dist, so that the curses modules are built using
113725a
setup.py with the downstream default (linking against libncursesw.so, rather
113725a
than libncurses.so), rather than within the Makefile; add a test to %%install
113725a
to verify the dso files that the curses module is linked against the correct
113725a
DSO (bug 539917; changes _cursesmodule.so -> _curses.so)
113725a
d5d2307
* Fri Jan 22 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-19
d5d2307
- add %%py3dir macro to macros.python3 (to be used during unified python 2/3
d5d2307
builds for setting up the python3 copy of the source tree)
d5d2307
6a82c19
* Wed Jan 20 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-18
6a82c19
- move lib2to3 from -tools subpackage to main package (bug 556667)
6a82c19
aa4aef2
* Sun Jan 17 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-17
aa4aef2
- patch Makefile.pre.in to avoid building static library (patch 6, bug 556092)
aa4aef2
6859f23
* Fri Jan 15 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-16
6859f23
- use the %%{_isa} macro to ensure that the python-devel dependency on python
6859f23
is for the correct multilib arch (#555943)
6859f23
- delete bundled copy of libffi to make sure we use the system one
6859f23
a9e268f
* Fri Jan 15 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-15
a9e268f
- fix the URLs output by pydoc so they point at python.org's 3.1 build of the
a9e268f
docs, rather than the 2.6 build
a9e268f
37de674
* Wed Jan 13 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-14
37de674
- replace references to /usr with %%{_prefix}; replace references to
37de674
/usr/include with %%{_includedir} (Toshio)
37de674
a3483f9
* Mon Jan 11 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-13
a3483f9
- fix permission on find-provides-without-python-sonames.sh from 775 to 755
a3483f9
a3483f9
* Mon Jan 11 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-12
a3483f9
- remove build-time requirements on tix and tk, since we already have
a3483f9
build-time requirements on the -devel subpackages for each of these (Thomas
a3483f9
Spura)
a3483f9
- replace usage of %%define with %%global (Thomas Spura)
a3483f9
- remove forcing of CC=gcc as this old workaround for bug 109268 appears to
a3483f9
longer be necessary
a3483f9
- move various test files from the "tools"/"tkinter" subpackages to the "test"
a3483f9
subpackage
a3483f9
a3483f9
* Thu Jan  7 2010 David Malcolm <dmalcolm@redhat.com> - 3.1.1-11
a3483f9
- add %%check section (thanks to Thomas Spura)
a3483f9
- update patch 4 to use correct shebang line
a3483f9
- get rid of stray patch file from buildroot
a3483f9
a3483f9
* Tue Nov 17 2009 Andrew McNabb <amcnabb@mcnabbs.org> - 3.1.1-10
a3483f9
- switched a few instances of "find |xargs" to "find -exec" for consistency.
a3483f9
- made the description of __os_install_post more accurate.
a3483f9
a3483f9
* Wed Nov  4 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-9
a3483f9
- add macros.python3 to the -devel subpackage, containing common macros for use
a3483f9
when packaging python3 modules
a3483f9
a3483f9
* Tue Nov  3 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-8
a3483f9
- add a provides of "python(abi)" (see bug 532118)
a3483f9
- fix issues identified by a.badger in package review (bug 526126, comment 39):
a3483f9
  - use "3" thoughout metadata, rather than "3.*"
a3483f9
  - remove conditional around "pkg-config openssl"
a3483f9
  - use standard cleanup of RPM_BUILD_ROOT
a3483f9
  - replace hardcoded references to /usr with _prefix macro
a3483f9
  - stop removing egg-info files
a3483f9
  - use /usr/bin/python3.1 rather than /use/bin/env python3.1 when fixing
a3483f9
up shebang lines
a3483f9
  - stop attempting to remove no-longer-present .cvsignore files
a3483f9
  - move the post/postun sections above the "files" sections
a3483f9
a3483f9
* Thu Oct 29 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-7
a3483f9
- remove commented-away patch 51 (python-2.6-distutils_rpm.patch): the -O1
a3483f9
flag is used by default in the upstream code
a3483f9
- "Makefile" and the config-32/64.h file are needed by distutils/sysconfig.py
a3483f9
_init_posix(), so we include them in the core package, along with their parent
a3483f9
directories (bug 531901)
a3483f9
a3483f9
* Tue Oct 27 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-6
a3483f9
- reword description, based on suggestion by amcnabb
a3483f9
- fix the test_email and test_imp selftests (patch 3 and patch 4 respectively)
a3483f9
- fix the test_tk and test_ttk_* selftests (patch 5)
a3483f9
- fix up the specfile's handling of shebang/perms to avoid corrupting
a3483f9
test_httpservers.py (sed command suggested by amcnabb)
a3483f9
a3483f9
* Thu Oct 22 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-5
a3483f9
- fixup importlib/_bootstrap.py so that it correctly handles being unable to
a3483f9
open .pyc files for writing (patch 2, upstream issue 7187)
a3483f9
- actually apply the rpath patch (patch 1)
a3483f9
a3483f9
* Thu Oct 22 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-4
a3483f9
- update patch0's setup of the crypt module to link it against libcrypt
a3483f9
- update patch0 to comment "datetimemodule" back out, so that it is built
a3483f9
using setup.py (see Setup, option 3), thus linking it statically against
a3483f9
timemodule.c and thus avoiding a run-time "undefined symbol:
a3483f9
_PyTime_DoubleToTimet" failure on "import datetime"
a3483f9
a3483f9
* Wed Oct 21 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-3
a3483f9
- remove executable flag from various files that shouldn't have it
a3483f9
- fix end-of-line encodings
a3483f9
- fix a character encoding
a3483f9
a3483f9
* Tue Oct 20 2009 David Malcolm <dmalcolm@redhat.com> - 3.1.1-2
a3483f9
- disable invocation of brp-python-bytecompile in postprocessing, since
a3483f9
it would be with the wrong version of python (adapted from ivazquez'
a3483f9
python3000 specfile)
a3483f9
- use a custom implementation of __find_provides in order to filter out bogus
a3483f9
provides lines for the various .so modules
a3483f9
- fixup distutils/unixccompiler.py to remove standard library path from rpath
a3483f9
(patch 1, was Patch0 in ivazquez' python3000 specfile)
a3483f9
- split out libraries into a -libs subpackage
a3483f9
- update summaries and descriptions, basing content on ivazquez' specfile
a3483f9
- fixup executable permissions on .py, .xpm and .xbm files, based on work in
a3483f9
ivazquez's specfile
a3483f9
- get rid of DOS batch files
a3483f9
- fixup permissions for shared libraries from non-standard 555 to standard 755
a3483f9
- move /usr/bin/python*-config to the -devel subpackage
a3483f9
- mark various directories as being documentation
a3483f9
a3483f9
* Thu Sep 24 2009 Andrew McNabb <amcnabb@mcnabbs.org> 3.1.1-1
a3483f9
- Initial package for Python 3.
a3483f9