diff --git a/debian/changelog b/debian/changelog index 76843de929fb27bb5ce4c5916fec68c6a3c16026..faeaf98d724842035709adabe2ad8b8022232129 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +python-defaults (2.7.2-3) UNRELEASED; urgency=low + + [ Piotr Ożarowski ] + * dh_python2: + - no longer moves .so.foo files to pyshared dir (closes: 635316) + - replaces .so symlinks with .so.foo files in dist-packages + + -- Piotr Ożarowski <piotr@debian.org> Tue, 26 Jul 2011 19:58:48 +0200 + python-defaults (2.7.2-2) experimental; urgency=low [ Piotr Ożarowski ] diff --git a/dh_python2 b/dh_python2 index f61715c706b88ed8e3add3955198a2f6cdb51560..2959b16bbc0c2042d0e95dce816c6aac5cf17365 100755 --- a/dh_python2 +++ b/dh_python2 @@ -28,7 +28,8 @@ import re import sys from filecmp import dircmp, cmpfiles, cmp as fcmp from optparse import OptionParser, SUPPRESS_HELP -from os.path import isabs, isdir, islink, exists, join, normpath, realpath +from os.path import isabs, isdir, islink, exists, join, normpath, realpath,\ + split from shutil import rmtree, copy as fcopy from stat import ST_MODE, S_IXUSR, S_IXGRP, S_IXOTH sys.path.insert(1, '/usr/share/python/') @@ -53,14 +54,6 @@ log = logging.getLogger(__name__) os.umask(022) EGGnPTH_RE = re.compile(r'(.*?)(-py\d\.\d+)?(.*?)(\.egg-info|\.pth)$') -"""TODO: move it to manpage -Examples: - dh_python2 - dh_python2 -V 2.4- # public files only, Python >= 2.4 - dh_python2 -p python-foo -X 'bar.*' /usr/lib/baz/ # private files in - python-foo package -""" - # naming conventions used in the file: # * version - tuple of integers # * ver - string representation of version @@ -269,7 +262,7 @@ def share_2x(dir1, dir2, dc=None): common_files = cmpfiles(dir1, dir2, common_files, shallow=False)[0] for fn in common_files: - if fn.endswith('.so'): + if 'so' in fn.split('.'): # foo.so, bar.so.0.1.2, etc. # in unlikely case where extensions are exactly the same continue fpath1 = join(dir1, fn) @@ -368,7 +361,7 @@ def scan(package, dname=None): if name.endswith('.egg-info'): if dbg_package: rmtree(join(root, name)) - dirs.pop(dirs.index(name)) + dirs.remove(name) continue clean_name = clean_egg_name(name) if clean_name != name: @@ -389,6 +382,20 @@ def scan(package, dname=None): os.remove(join(root, fn)) continue if public_dir: + fpath = join(root, fn) + if fext == 'so' and islink(fpath): + dstfpath = fpath + links = set() + while islink(dstfpath): + links.add(dstfpath) + dstfpath = join(root, os.readlink(dstfpath)) + if exists(dstfpath) and '.so.' in split(dstfpath)[-1]: + # rename .so.$FOO symlinks, remove other ones + for lpath in links: + log.info('removing symlink: %s', lpath) + os.remove(lpath) + log.info('renaming %s to %s', dstfpath, fn) + os.rename(dstfpath, fpath) if dbg_package and fext not in ('so', 'h'): os.remove(join(root, fn)) continue diff --git a/tests/t3/Makefile b/tests/t3/Makefile index 6803bfb49bb593d5682eef510589f620d5f4d2e0..96032f839342b7f2de6692b1e4be5cae80570314 100644 --- a/tests/t3/Makefile +++ b/tests/t3/Makefile @@ -12,6 +12,11 @@ check: debian/python-foo/DEBIAN/postinst test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/bar.so test ! -f debian/python-foo/usr/share/pyshared/foo/bar.so + test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/spam.so + test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/spam.so.0.1 + test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so + test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1 + test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1.2 clean: ./debian/rules clean diff --git a/tests/t3/debian/rules b/tests/t3/debian/rules index 1bba84bfdb97337e3a40331d0487e03a6a47c2bb..0915111bacd46d75f7679b1a47af1e422e18f691 100755 --- a/tests/t3/debian/rules +++ b/tests/t3/debian/rules @@ -1,9 +1,22 @@ #!/usr/bin/make -f +DPY=$(shell PYTHONPATH=../../ python -c 'import debpython.version as v; print(v.vrepr(v.DEFAULT))') %: dh $@ --buildsystem=python_distutils override_dh_pysupport: # install also as private extension - dh_install debian/python-foo/usr/lib/`pyversions -d`/dist-packages/foo/bar.so \ + dh_install debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/bar.so \ /usr/lib/python-foo/ + # ... and under versioned name with a symlink + cp debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/bar.so \ + debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/spam.so.0 + dh_link /usr/lib/python${DPY}/dist-packages/foo/spam.so.0 \ + /usr/lib/python${DPY}/dist-packages/foo/spam.so + # ... and with multiple symlinks + cp debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/bar.so \ + debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1.2 + dh_link /usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1.2 \ + /usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1 + dh_link /usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1 \ + /usr/lib/python${DPY}/dist-packages/foo/baz.so DH_VERBOSE=1 ../../dh_python2