- introduce macros for 3 directories, replacing expanded references

throughout: %%{pylibdir}, %%{dynload_dir}, %%{site_packages}
- explicitly list all lib-dynload files, rather than dynamically gathering
    the payload into a temporary text file, so that we can be sure what we
    are shipping; remove now-redundant testing for presence of certain .so
    files
- remove embedded copy of zlib from source tree before building
This commit is contained in:
dmalcolm 2010-01-25 21:41:09 +00:00
parent 671ce7735d
commit 05912b1cfa
1 changed files with 171 additions and 94 deletions

View File

@ -15,14 +15,17 @@
%endif %endif
%global pybasever 2.6 %global pybasever 2.6
%global tools_dir %{_libdir}/python%{pybasever}/Tools %global pylibdir %{_libdir}/python%{pybasever}
%global demo_dir %{_libdir}/python%{pybasever}/Demo %global tools_dir %{pylibdir}/Tools
%global doc_tools_dir %{_libdir}/python%{pybasever}/Doc/tools %global demo_dir %{pylibdir}/Demo
%global doc_tools_dir %{pylibdir}/Doc/tools
%global dynload_dir %{pylibdir}/lib-dynload
%global site_packages %{pylibdir}/site-packages
Summary: An interpreted, interactive, object-oriented programming language Summary: An interpreted, interactive, object-oriented programming language
Name: %{python} Name: %{python}
Version: 2.6.4 Version: 2.6.4
Release: 9%{?dist} Release: 10%{?dist}
License: Python License: Python
Group: Development/Languages Group: Development/Languages
Provides: python-abi = %{pybasever} Provides: python-abi = %{pybasever}
@ -216,12 +219,19 @@ code that uses more than just unittest and/or test_support.py.
%prep %prep
%setup -q -n Python-%{version} %setup -q -n Python-%{version}
# Ensure that we're using the system copy of libffi, rather than the copy # Ensure that we're using the system copy of various libraries, rather than
# shipped by upstream in the tarball: # copies shipped by upstream in the tarball:
# Remove embedded copy of libffi:
for SUBDIR in darwin libffi libffi_arm_wince libffi_msvc libffi_osx ; do for SUBDIR in darwin libffi libffi_arm_wince libffi_msvc libffi_osx ; do
rm -r Modules/_ctypes/$SUBDIR || exit 1 ; rm -r Modules/_ctypes/$SUBDIR || exit 1 ;
done done
# Remove embedded copy of zlib:
rm -r Modules/zlib || exit 1
#
# Apply patches:
#
%patch0 -p1 -b .rhconfig %patch0 -p1 -b .rhconfig
%patch1 -p1 -b .no_gui %patch1 -p1 -b .no_gui
#%%patch2 -p1 -b .no-doc #%%patch2 -p1 -b .no-doc
@ -319,7 +329,7 @@ for fixed in $RPM_BUILD_ROOT%{_bindir}/pydoc; do
done done
# Junk, no point in putting in -test sub-pkg # Junk, no point in putting in -test sub-pkg
rm -f $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/idlelib/testcode.py* rm -f $RPM_BUILD_ROOT/%{pylibdir}/idlelib/testcode.py*
# don't include tests that are run at build time in the package # don't include tests that are run at build time in the package
# This is documented, and used: rhbz#387401 # This is documented, and used: rhbz#387401
@ -327,11 +337,11 @@ if /bin/false; then
# Move this to -test subpackage. # Move this to -test subpackage.
mkdir save_bits_of_test mkdir save_bits_of_test
for i in test_support.py __init__.py; do for i in test_support.py __init__.py; do
cp -a $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/test/$i save_bits_of_test cp -a $RPM_BUILD_ROOT/%{pylibdir}/test/$i save_bits_of_test
done done
rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/test rm -rf $RPM_BUILD_ROOT/%{pylibdir}/test
mkdir $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/test mkdir $RPM_BUILD_ROOT/%{pylibdir}/test
cp -a save_bits_of_test/* $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/test cp -a save_bits_of_test/* $RPM_BUILD_ROOT/%{pylibdir}/test
fi fi
%if %{main_python} %if %{main_python}
@ -343,26 +353,26 @@ mv $RPM_BUILD_ROOT/%{_mandir}/man1/python.1 $RPM_BUILD_ROOT/%{_mandir}/man1/pyth
# tools # tools
mkdir -p ${RPM_BUILD_ROOT}%{_libdir}/python%{pybasever}/site-packages mkdir -p ${RPM_BUILD_ROOT}%{site_packages}
#modulator #modulator
cat > ${RPM_BUILD_ROOT}%{_bindir}/modulator << EOF cat > ${RPM_BUILD_ROOT}%{_bindir}/modulator << EOF
#!/bin/bash #!/bin/bash
exec %{_libdir}/python%{pybasever}/site-packages/modulator/modulator.py exec %{site_packages}/modulator/modulator.py
EOF EOF
chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/modulator chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/modulator
cp -r Tools/modulator \ cp -r Tools/modulator \
${RPM_BUILD_ROOT}%{_libdir}/python%{pybasever}/site-packages/ ${RPM_BUILD_ROOT}%{site_packages}/
#pynche #pynche
cat > ${RPM_BUILD_ROOT}%{_bindir}/pynche << EOF cat > ${RPM_BUILD_ROOT}%{_bindir}/pynche << EOF
#!/bin/bash #!/bin/bash
exec %{_libdir}/python%{pybasever}/site-packages/pynche/pynche exec %{site_packages}/pynche/pynche
EOF EOF
chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/pynche chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/pynche
rm -f Tools/pynche/*.pyw rm -f Tools/pynche/*.pyw
cp -r Tools/pynche \ cp -r Tools/pynche \
${RPM_BUILD_ROOT}%{_libdir}/python%{pybasever}/site-packages/ ${RPM_BUILD_ROOT}%{site_packages}/
mv Tools/modulator/README Tools/modulator/README.modulator mv Tools/modulator/README Tools/modulator/README.modulator
mv Tools/pynche/README Tools/pynche/README.pynche mv Tools/pynche/README Tools/pynche/README.pynche
@ -390,9 +400,9 @@ find $RPM_BUILD_ROOT/ -name ".cvsignore"|xargs rm -f
find . -name "*~"|xargs rm -f find . -name "*~"|xargs rm -f
find . -name ".cvsignore"|xargs rm -f find . -name ".cvsignore"|xargs rm -f
#zero length #zero length
rm -f $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/site-packages/modulator/Templates/copyright rm -f $RPM_BUILD_ROOT%{site_packages}/modulator/Templates/copyright
rm -f $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/LICENSE.txt rm -f $RPM_BUILD_ROOT%{pylibdir}/LICENSE.txt
#make the binaries install side by side with the main python #make the binaries install side by side with the main python
@ -408,15 +418,8 @@ mv pydoc pydoc%{__python_ver}
popd popd
%endif %endif
find $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/lib-dynload -type d | sed "s|$RPM_BUILD_ROOT|%dir |" > dynfiles
find $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/lib-dynload -type f | \
grep -v "_tkinter.so$" | \
grep -v "_ctypes_test.so$" | \
grep -v "_testcapimodule.so$" | \
sed "s|$RPM_BUILD_ROOT||" >> dynfiles
# Fix for bug #136654 # Fix for bug #136654
rm -f $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/email/test/data/audiotest.au $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/test/audiotest.au rm -f $RPM_BUILD_ROOT%{pylibdir}/email/test/data/audiotest.au $RPM_BUILD_ROOT%{pylibdir}/test/audiotest.au
# Fix bug #143667: python should own /usr/lib/python2.x on 64-bit machines # Fix bug #143667: python should own /usr/lib/python2.x on 64-bit machines
%if "%{_lib}" == "lib64" %if "%{_lib}" == "lib64"
@ -445,26 +448,17 @@ cat > $RPM_BUILD_ROOT%{_includedir}/python%{pybasever}/pyconfig.h << EOF
#error "Unknown word size" #error "Unknown word size"
#endif #endif
EOF EOF
ln -s ../../libpython%{pybasever}.so $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/config/libpython%{pybasever}.so ln -s ../../libpython%{pybasever}.so $RPM_BUILD_ROOT%{pylibdir}/config/libpython%{pybasever}.so
# Fix for bug 201434: make sure distutils looks at the right pyconfig.h file # Fix for bug 201434: make sure distutils looks at the right pyconfig.h file
sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/distutils/sysconfig.py sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" $RPM_BUILD_ROOT%{pylibdir}/distutils/sysconfig.py
# Get rid of egg-info files (core python modules are installed through rpms) # Get rid of egg-info files (core python modules are installed through rpms)
rm $RPM_BUILD_ROOT%{_libdir}/python%{pybasever}/*.egg-info rm $RPM_BUILD_ROOT%{pylibdir}/*.egg-info
# python's build is stupid and doesn't fail if extensions fail to build
# let's list a few that we care about...
for so in _bsddb.so _ctypes.so _curses.so _elementtree.so _sqlite3.so _ssl.so readline.so _hashlib.so zlibmodule.so bz2.so pyexpat.so; do
if [ ! -f $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/lib-dynload/$so ]; then
echo "Missing $so!!!"
exit 1
fi
done
# Ensure that the curses module was linked against libncursesw.so, rather than # Ensure that the curses module was linked against libncursesw.so, rather than
# libncurses.so (bug 539917) # libncurses.so (bug 539917)
ldd $RPM_BUILD_ROOT/%{_libdir}/python%{pybasever}/lib-dynload/_curses*.so \ ldd $RPM_BUILD_ROOT/%{dynload_dir}/_curses*.so \
| grep curses \ | grep curses \
| grep libncurses.so && (echo "_curses.so linked against libncurses.so" ; exit 1) | grep libncurses.so && (echo "_curses.so linked against libncurses.so" ; exit 1)
@ -476,7 +470,7 @@ rm -fr $RPM_BUILD_ROOT
%postun libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig
%files -f dynfiles %files
%defattr(-, root, root) %defattr(-, root, root)
%doc LICENSE README %doc LICENSE README
%{_bindir}/pydoc* %{_bindir}/pydoc*
@ -487,41 +481,116 @@ rm -fr $RPM_BUILD_ROOT
%{_bindir}/python%{pybasever} %{_bindir}/python%{pybasever}
%{_mandir}/*/* %{_mandir}/*/*
%dir %{_libdir}/python%{pybasever} %dir %{pylibdir}
%dir %{_libdir}/python%{pybasever}/site-packages %dir %{dynload_dir}
%{_libdir}/python%{pybasever}/site-packages/README %{dynload_dir}/Python-%{version}-py%{pybasever}.egg-info
%{_libdir}/python%{pybasever}/*.py* %{dynload_dir}/_bisectmodule.so
%{_libdir}/python%{pybasever}/*.doc %{dynload_dir}/_bsddb.so
%dir %{_libdir}/python%{pybasever}/bsddb %{dynload_dir}/_bytesio.so
%{_libdir}/python%{pybasever}/bsddb/*.py* %{dynload_dir}/_codecs_cn.so
%{_libdir}/python%{pybasever}/compiler %{dynload_dir}/_codecs_hk.so
%dir %{_libdir}/python%{pybasever}/ctypes %{dynload_dir}/_codecs_iso2022.so
%{_libdir}/python%{pybasever}/ctypes/*.py* %{dynload_dir}/_codecs_jp.so
%{_libdir}/python%{pybasever}/ctypes/macholib %{dynload_dir}/_codecs_kr.so
%{_libdir}/python%{pybasever}/curses %{dynload_dir}/_codecs_tw.so
%dir %{_libdir}/python%{pybasever}/distutils %{dynload_dir}/_collectionsmodule.so
%{_libdir}/python%{pybasever}/distutils/*.py* %{dynload_dir}/_csv.so
%{_libdir}/python%{pybasever}/distutils/README %{dynload_dir}/_ctypes.so
%{_libdir}/python%{pybasever}/distutils/command %{dynload_dir}/_curses.so
%dir %{_libdir}/python%{pybasever}/email %{dynload_dir}/_curses_panel.so
%{_libdir}/python%{pybasever}/email/*.py* %{dynload_dir}/_elementtree.so
%{_libdir}/python%{pybasever}/email/mime %{dynload_dir}/_fileio.so
%{_libdir}/python%{pybasever}/encodings %{dynload_dir}/_functoolsmodule.so
%{_libdir}/python%{pybasever}/hotshot %{dynload_dir}/_hashlib.so
%{_libdir}/python%{pybasever}/idlelib %{dynload_dir}/_heapq.so
%dir %{_libdir}/python%{pybasever}/json %{dynload_dir}/_hotshot.so
%{_libdir}/python%{pybasever}/json/*.py* %{dynload_dir}/_json.so
%{_libdir}/python%{pybasever}/lib2to3 %{dynload_dir}/_localemodule.so
%{_libdir}/python%{pybasever}/logging %{dynload_dir}/_lsprof.so
%{_libdir}/python%{pybasever}/multiprocessing %{dynload_dir}/_md5module.so
%{_libdir}/python%{pybasever}/plat-linux2 %{dynload_dir}/_multibytecodecmodule.so
%dir %{_libdir}/python%{pybasever}/sqlite3 %{dynload_dir}/_multiprocessing.so
%{_libdir}/python%{pybasever}/sqlite3/*.py* %{dynload_dir}/_randommodule.so
%dir %{_libdir}/python%{pybasever}/test %{dynload_dir}/_sha256module.so
%{_libdir}/python%{pybasever}/test/test_support.py* %{dynload_dir}/_sha512module.so
%{_libdir}/python%{pybasever}/test/__init__.py* %{dynload_dir}/_shamodule.so
%{_libdir}/python%{pybasever}/wsgiref %{dynload_dir}/_socketmodule.so
%{_libdir}/python%{pybasever}/xml %{dynload_dir}/_sqlite3.so
%{dynload_dir}/_ssl.so
%{dynload_dir}/_struct.so
%{dynload_dir}/_weakref.so
%{dynload_dir}/arraymodule.so
%{dynload_dir}/audioop.so
%{dynload_dir}/binascii.so
%{dynload_dir}/bz2.so
%{dynload_dir}/cPickle.so
%{dynload_dir}/cStringIO.so
%{dynload_dir}/cmathmodule.so
%{dynload_dir}/cryptmodule.so
%{dynload_dir}/datetime.so
%{dynload_dir}/dbm.so
%{dynload_dir}/dlmodule.so
%{dynload_dir}/fcntlmodule.so
%{dynload_dir}/future_builtins.so
%{dynload_dir}/gdbmmodule.so
%{dynload_dir}/grpmodule.so
%{dynload_dir}/imageop.so
%{dynload_dir}/itertoolsmodule.so
%{dynload_dir}/linuxaudiodev.so
%{dynload_dir}/mathmodule.so
%{dynload_dir}/mmapmodule.so
%{dynload_dir}/nismodule.so
%{dynload_dir}/operator.so
%{dynload_dir}/ossaudiodev.so
%{dynload_dir}/parsermodule.so
%{dynload_dir}/pyexpat.so
%{dynload_dir}/readline.so
%{dynload_dir}/resource.so
%{dynload_dir}/selectmodule.so
%{dynload_dir}/spwdmodule.so
%{dynload_dir}/stropmodule.so
%{dynload_dir}/syslog.so
%{dynload_dir}/termios.so
%{dynload_dir}/timemodule.so
%{dynload_dir}/timingmodule.so
%{dynload_dir}/unicodedata.so
%{dynload_dir}/xxsubtype.so
%{dynload_dir}/zlibmodule.so
%dir %{site_packages}
%{site_packages}/README
%{pylibdir}/*.py*
%{pylibdir}/*.doc
%dir %{pylibdir}/bsddb
%{pylibdir}/bsddb/*.py*
%{pylibdir}/compiler
%dir %{pylibdir}/ctypes
%{pylibdir}/ctypes/*.py*
%{pylibdir}/ctypes/macholib
%{pylibdir}/curses
%dir %{pylibdir}/distutils
%{pylibdir}/distutils/*.py*
%{pylibdir}/distutils/README
%{pylibdir}/distutils/command
%dir %{pylibdir}/email
%{pylibdir}/email/*.py*
%{pylibdir}/email/mime
%{pylibdir}/encodings
%{pylibdir}/hotshot
%{pylibdir}/idlelib
%dir %{pylibdir}/json
%{pylibdir}/json/*.py*
%{pylibdir}/lib2to3
%{pylibdir}/logging
%{pylibdir}/multiprocessing
%{pylibdir}/plat-linux2
%dir %{pylibdir}/sqlite3
%{pylibdir}/sqlite3/*.py*
%dir %{pylibdir}/test
%{pylibdir}/test/test_support.py*
%{pylibdir}/test/__init__.py*
%{pylibdir}/wsgiref
%{pylibdir}/xml
%if "%{_lib}" == "lib64" %if "%{_lib}" == "lib64"
%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever} %attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}
%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages %attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages
@ -530,8 +599,8 @@ rm -fr $RPM_BUILD_ROOT
# "Makefile" and the config-32/64.h file are needed by # "Makefile" and the config-32/64.h file are needed by
# distutils/sysconfig.py:_init_posix(), so we include them in the core # distutils/sysconfig.py:_init_posix(), so we include them in the core
# package, along with their parent directories (bug 531901): # package, along with their parent directories (bug 531901):
%dir %{_libdir}/python%{pybasever}/config %dir %{pylibdir}/config
%{_libdir}/python%{pybasever}/config/Makefile %{pylibdir}/config/Makefile
%dir %{_includedir}/python%{pybasever} %dir %{_includedir}/python%{pybasever}
%{_includedir}/python%{pybasever}/%{_pyconfig_h} %{_includedir}/python%{pybasever}/%{_pyconfig_h}
@ -542,22 +611,22 @@ rm -fr $RPM_BUILD_ROOT
%files devel %files devel
%defattr(-,root,root) %defattr(-,root,root)
%{_libdir}/python%{pybasever}/config/* %{pylibdir}/config/*
%exclude %{_libdir}/python%{pybasever}/config/Makefile %exclude %{pylibdir}/config/Makefile
%{_includedir}/python%{pybasever}/*.h %{_includedir}/python%{pybasever}/*.h
%exclude %{_includedir}/python%{pybasever}/%{_pyconfig_h} %exclude %{_includedir}/python%{pybasever}/%{_pyconfig_h}
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit %doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
%{_bindir}/python-config %{_bindir}/python-config
%{_bindir}/python%{pybasever}-config %{_bindir}/python%{pybasever}-config
%{_libdir}/python%{pybasever}/config/* %{pylibdir}/config/*
%{_libdir}/libpython%{pybasever}.so %{_libdir}/libpython%{pybasever}.so
%files tools %files tools
%defattr(-,root,root,755) %defattr(-,root,root,755)
%doc Tools/modulator/README.modulator %doc Tools/modulator/README.modulator
%doc Tools/pynche/README.pynche %doc Tools/pynche/README.pynche
%{_libdir}/python%{pybasever}/site-packages/modulator %{site_packages}/modulator
%{_libdir}/python%{pybasever}/site-packages/pynche %{site_packages}/pynche
%{_bindir}/smtpd*.py* %{_bindir}/smtpd*.py*
%{_bindir}/2to3* %{_bindir}/2to3*
%{_bindir}/idle* %{_bindir}/idle*
@ -567,26 +636,34 @@ rm -fr $RPM_BUILD_ROOT
%{_bindir}/msgfmt*.py* %{_bindir}/msgfmt*.py*
%{tools_dir} %{tools_dir}
%{demo_dir} %{demo_dir}
%{_libdir}/python%{pybasever}/Doc %{pylibdir}/Doc
%files -n %{tkinter} %files -n %{tkinter}
%defattr(-,root,root,755) %defattr(-,root,root,755)
%{_libdir}/python%{pybasever}/lib-tk %{pylibdir}/lib-tk
%{_libdir}/python%{pybasever}/lib-dynload/_tkinter.so %{dynload_dir}/_tkinter.so
%files test %files test
%defattr(-, root, root) %defattr(-, root, root)
%{_libdir}/python%{pybasever}/bsddb/test %{pylibdir}/bsddb/test
%{_libdir}/python%{pybasever}/ctypes/test %{pylibdir}/ctypes/test
%{_libdir}/python%{pybasever}/distutils/tests %{pylibdir}/distutils/tests
%{_libdir}/python%{pybasever}/email/test %{pylibdir}/email/test
%{_libdir}/python%{pybasever}/json/tests %{pylibdir}/json/tests
%{_libdir}/python%{pybasever}/sqlite3/test %{pylibdir}/sqlite3/test
%{_libdir}/python%{pybasever}/test %{pylibdir}/test
%{_libdir}/python%{pybasever}/lib-dynload/_ctypes_test.so %{dynload_dir}/_ctypes_test.so
%{_libdir}/python%{pybasever}/lib-dynload/_testcapimodule.so %{dynload_dir}/_testcapimodule.so
%changelog %changelog
* Mon Jan 25 2010 David Malcolm <dmalcolm@redhat.com> - 2.6.4-10
- introduce macros for 3 directories, replacing expanded references throughout:
%%{pylibdir}, %%{dynload_dir}, %%{site_packages}
- explicitly list all lib-dynload files, rather than dynamically gathering the
payload into a temporary text file, so that we can be sure what we are
shipping; remove now-redundant testing for presence of certain .so files
- remove embedded copy of zlib from source tree before building
* Mon Jan 25 2010 David Malcolm <dmalcolm@redhat.com> - 2.6.4-9 * Mon Jan 25 2010 David Malcolm <dmalcolm@redhat.com> - 2.6.4-9
- change python-2.6.2-config.patch to remove our downstream change to curses - change python-2.6.2-config.patch to remove our downstream change to curses
configuration in Modules/Setup.dist, so that the curses modules are built using configuration in Modules/Setup.dist, so that the curses modules are built using