[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#682906: unblock: python-defaults/2.7.3-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package python-defaults

The RC bug in unstable (#680793) that prevented this from migrating with an
automatice freeze exception is fixed in this upload.  Unblocking this will do
a number of beneficial things for squeeze:

 - Match the version number for python and python2.7.3.  Although this is
   costmetic, it does cause confusion.

 - Matches the feature set in squeeze between dh_python2 and dh_python3.  It
   would be difficult for backporters, derivatives, and third party vendors to
   keep straight which did what with a skewed feature set.  This is better
   avoided.

This is low risk to do because the changes have already been exercised in
dh_python3.  In fact, the issues it had were with dh_python2 code that had not
been completely adapted to python3.  The changes in this package for python
are solid.

I am attaching both the debdiff for this upload and for testing to show the
minor nature of the changes from what already had, at one time, a freeze
exception.

unblock python-defaults/2.7.3-2
diff -Nru python-defaults-2.7.3/debian/changelog python-defaults-2.7.3/debian/changelog
--- python-defaults-2.7.3/debian/changelog	2012-06-30 14:24:03.000000000 -0400
+++ python-defaults-2.7.3/debian/changelog	2012-07-26 18:26:27.000000000 -0400
@@ -1,3 +1,15 @@
+python-defaults (2.7.3-2) unstable; urgency=low
+
+  * dh_python2: ignore empty files while trying to normalize shebangs
+    (Closes: #680793)
+  * Fix lack of python-imaging in pydist/dist_fallback
+    - Add python-imaging override to pydist/generate_fallback_list.py
+    - pydist/dist_fallback: Regenerate to add python-imaging (which wasn't
+      recognized before due to .pth file) along with a few automatic
+      adjustments 
+
+ -- Piotr Ożarowski <piotr@debian.org>  Thu, 26 Jul 2012 23:03:32 +0200
+
 python-defaults (2.7.3-1) unstable; urgency=low
 
   [ Piotr Ożarowski ]
diff -Nru python-defaults-2.7.3/debpython/tools.py python-defaults-2.7.3/debpython/tools.py
--- python-defaults-2.7.3/debpython/tools.py	2012-06-09 18:08:06.000000000 -0400
+++ python-defaults-2.7.3/debpython/tools.py	2012-07-26 18:26:10.000000000 -0400
@@ -100,6 +100,9 @@
     try:
         with open(fpath) as fp:
             fcontent = fp.readlines()
+        if not fcontent:
+            log.debug('fix_shebang: ignoring empty file: %s', fpath)
+            return None
     except IOError:
         log.error('cannot open %s', fpath)
         return False
diff -Nru python-defaults-2.7.3/pydist/dist_fallback python-defaults-2.7.3/pydist/dist_fallback
--- python-defaults-2.7.3/pydist/dist_fallback	2012-06-30 08:22:25.000000000 -0400
+++ python-defaults-2.7.3/pydist/dist_fallback	2012-07-26 18:26:10.000000000 -0400
@@ -2,6 +2,7 @@
 setuptools python-pkg-resources
 wsgiref python (>= 2.5) | python-wsgiref
 argparse python (>= 2.7) | python-argparse
+pil python-imaging
 AddOns python-peak.util
 BatchModify trac-batchmodify
 BitTornado bittornado
@@ -193,6 +194,7 @@
 deluge deluge-common
 devscripts devscripts
 dicompyler dicompyler
+dispcalGUI dispcalgui
 dissy dissy
 djagios djagios
 django_ajax_selects django-ajax-selects
@@ -372,7 +374,6 @@
 osc osc
 pYsearch python-yahoo
 pbundler pbundler
-pdfposter pdfposter
 pdfshuffler pdfshuffler
 pep8 pep8
 perroquet perroquet
@@ -405,7 +406,6 @@
 pyacidobasic python-acidobasic
 pyacoustid python-acoustid
 pyalsaaudio python-alsaaudio
-pybackpack pybackpack
 pybloom python-bloomfilter
 pybridge pybridge
 pybtex pybtex
@@ -450,7 +450,6 @@
 pyrite_publisher pyrite-publisher
 pysane python-imaging-sane
 pysatellites python-satellites
-pysendfile python-sendfile
 pyserial python-serial
 pysnmp python-pysnmp4
 pysnmp_apps python-pysnmp4-apps
@@ -625,9 +624,9 @@
 udev_discover udev-discover
 ufw ufw
 unattended_upgrades unattended-upgrades
-undertaker undertaker
 unittest_xml_reporting python-xmlrunner
 urlscan urlscan
+vamos undertaker
 vboxapi virtualbox
 virtaal virtaal
 virtinst virtinst
diff -Nru python-defaults-2.7.3/pydist/generate_fallback_list.py python-defaults-2.7.3/pydist/generate_fallback_list.py
--- python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-06-10 08:07:25.000000000 -0400
+++ python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-07-26 18:26:10.000000000 -0400
@@ -72,4 +72,6 @@
 fp.write('setuptools python-pkg-resources\n')
 fp.write('wsgiref python (>= 2.5) | python-wsgiref\n')
 fp.write('argparse python (>= 2.7) | python-argparse\n')
+# wasn't recognized due to .pth file (egg-info is in PIL/ and not in *-packages/)
+fp.write('pil python-imaging\n')
 fp.writelines(result)
diff -Nru python-defaults-2.7.3~rc2/debian/changelog python-defaults-2.7.3/debian/changelog
--- python-defaults-2.7.3~rc2/debian/changelog	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/changelog	2012-07-26 18:26:27.000000000 -0400
@@ -1,3 +1,46 @@
+python-defaults (2.7.3-2) unstable; urgency=low
+
+  * dh_python2: ignore empty files while trying to normalize shebangs
+    (Closes: #680793)
+  * Fix lack of python-imaging in pydist/dist_fallback
+    - Add python-imaging override to pydist/generate_fallback_list.py
+    - pydist/dist_fallback: Regenerate to add python-imaging (which wasn't
+      recognized before due to .pth file) along with a few automatic
+      adjustments 
+
+ -- Piotr Ożarowski <piotr@debian.org>  Thu, 26 Jul 2012 23:03:32 +0200
+
+python-defaults (2.7.3-1) unstable; urgency=low
+
+  [ Piotr Ożarowski ]
+  * dh_python2:
+    - remove even more \.so.* dangling symlinks, thanks to Stefano
+      Rivera for providing a test case
+    - rewrite shebangs by default (disable via --no-shebang-rewrite),
+      examples:
+       + "/usr/bin/env python*" → "/usr/bin/python*"
+       + "/usr/local/bin/python foo" → "/usr/bin/python foo"
+       + "/usr/bin/python2" → "/usr/bin/python"
+    - new --shebang option to replace all shebangs in bin dirs
+      (example: --shebang /usr/bin/python2.6)
+    - no longer generates python2.X | python2.Y depenendies for public modules
+      (Closes: 625740)
+    - translate Python version numbers into Debian ones for those
+      require.txt items that have a pydist file with (uscan like) rules
+      or PEP386 flag (Closes: #653740)
+  * Improve dh_python2 manpage a bit, add information about cleaning debug
+    packages (Closes: #653741)
+  * pyversions, dh_python2, pycompile: allow to override system's list of
+    supported Python versions via DEBPYTHON_SUPPORTED and default Python
+    version via DEBPYTHON_DEFAULT env. variables
+  * Debhelper's python2 sequence now inserts dh_python2 before dh_installinit
+    (closes: 670418)
+
+  [ Scott Kitterman ]
+  * Bump upstream version to match current unstable/wheezy python2.7 version
+
+ -- Piotr Ożarowski <piotr@debian.org>  Sat, 30 Jun 2012 20:23:59 +0200
+
 python-defaults (2.7.3~rc2-1) unstable; urgency=low
 
   [ Scott Kitterman ]
diff -Nru python-defaults-2.7.3~rc2/debian/control python-defaults-2.7.3/debian/control
--- python-defaults-2.7.3~rc2/debian/control	2012-06-05 22:59:07.000000000 -0400
+++ python-defaults-2.7.3/debian/control	2012-07-26 18:26:10.000000000 -0400
@@ -13,7 +13,7 @@
 Package: python
 Architecture: all
 Priority: standard
-Depends: ${misc:Depends}, python2.7 (>= 2.7.3~rc2-1~), python-minimal (= ${binary:Version})
+Depends: ${misc:Depends}, python2.7 (>= 2.7.3-1~), python-minimal (= ${binary:Version})
 Suggests: python-doc (= ${binary:Version}), python-tk (= ${binary:Version})
 Conflicts: python-central (<< 0.5.5)
 Breaks: python-csv (<< 1.0-4), python-bz2 (<< 1.1-8), python-email (<< 2.5.5-3), update-manager-core (<< 0.200.5-2)
@@ -30,11 +30,11 @@
 Package: python-minimal
 Architecture: all
 Priority: standard
-Depends: ${misc:Depends}, python2.7-minimal (>= 2.7.3~rc2-1~), dpkg (>= 1.13.20)
+Depends: ${misc:Depends}, python2.7-minimal (>= 2.7.3-1~), dpkg (>= 1.13.20)
 Recommends: python
 Conflicts: python-central (<< 0.5.5)
-Breaks: python (<= 2.7.3~rc2-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
-Replaces: python (<= 2.7.3~rc2-1~)
+Breaks: python (<= 2.7.3-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
+Replaces: python (<= 2.7.3-1~)
 Description: minimal subset of the Python language (default version)
  This package contains the interpreter and some essential modules.  It's used
  in the boot process for some basic tasks.
@@ -43,7 +43,7 @@
 
 Package: python-examples
 Architecture: all
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-examples (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-examples (>= 2.7.3-1~)
 Description: examples for the Python language (default version)
  Examples, Demos and Tools for Python. These are files included in
  the upstream Python distribution.
@@ -53,7 +53,7 @@
 
 Package: python-dev
 Architecture: all
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dev (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dev (>= 2.7.3-1~)
 Description: header files and a static library for Python (default)
  Header files, a static library and development tools for building
  Python modules, extending the Python interpreter or embedding Python
@@ -66,8 +66,8 @@
 Architecture: all
 Depends: ${misc:Depends}, python (= ${binary:Version}), python-tk (>= 2.4.3-3), idle-python2.7
 Enhances: python
-Replaces: python (<< 2.7.3~rc2-1~)
-Breaks: python (<< 2.7.3~rc2-1~)
+Replaces: python (<< 2.7.3-1~)
+Breaks: python (<< 2.7.3-1~)
 Description: IDE for Python using Tkinter (default version)
  IDLE is an Integrated Development Environment for Python.
  IDLE is written using Tkinter and therefore quite platform-independent.
@@ -78,7 +78,7 @@
 Package: python-doc
 Section: doc
 Architecture: all
-Depends: ${misc:Depends}, python2.7-doc (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python2.7-doc (>= 2.7.3-1~)
 Suggests: python-examples, python (= ${binary:Version})
 Breaks: python (<< 2.3.5)
 Replaces: python (<< 2.3.5)
@@ -104,7 +104,7 @@
 Architecture: all
 Section: debug
 Priority: extra
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dbg (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dbg (>= 2.7.3-1~)
 Provides: python-gdbm-dbg, python-tk-dbg
 Description: debug build of the Python Interpreter (version 2.7)
  Python interpreter configured with --pydebug. Dynamically loaded modules are
diff -Nru python-defaults-2.7.3~rc2/debian/control.in python-defaults-2.7.3/debian/control.in
--- python-defaults-2.7.3~rc2/debian/control.in	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/control.in	2012-07-26 18:26:10.000000000 -0400
@@ -33,8 +33,8 @@
 Depends: ${misc:Depends}, @PVER@-minimal (>= @PREVVER@), dpkg (>= 1.13.20)
 Recommends: python
 Conflicts: python-central (<< 0.5.5)
-Breaks: python (<= 2.7.3~rc2-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
-Replaces: python (<= 2.7.3~rc2-1~)
+Breaks: python (<= 2.7.3-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
+Replaces: python (<= 2.7.3-1~)
 Description: minimal subset of the Python language (default version)
  This package contains the interpreter and some essential modules.  It's used
  in the boot process for some basic tasks.
@@ -66,8 +66,8 @@
 Architecture: all
 Depends: ${misc:Depends}, python (= ${binary:Version}), python-tk (>= 2.4.3-3), idle-@PVER@
 Enhances: python
-Replaces: python (<< 2.7.3~rc2-1~)
-Breaks: python (<< 2.7.3~rc2-1~)
+Replaces: python (<< 2.7.3-1~)
+Breaks: python (<< 2.7.3-1~)
 Description: IDE for Python using Tkinter (default version)
  IDLE is an Integrated Development Environment for Python.
  IDLE is written using Tkinter and therefore quite platform-independent.
diff -Nru python-defaults-2.7.3~rc2/debian/python-policy.sgml python-defaults-2.7.3/debian/python-policy.sgml
--- python-defaults-2.7.3~rc2/debian/python-policy.sgml	2012-06-05 23:07:12.000000000 -0400
+++ python-defaults-2.7.3/debian/python-policy.sgml	2012-07-26 18:26:10.000000000 -0400
@@ -330,7 +330,7 @@
 	  <item>
 	    <p>
 	      /usr/share/python/runtime.d/*.rtremove: these are called when
-	      a runtime is installed or stops being supported.  The first
+	      a runtime is removed or stops being supported.  The first
 	      argument is "rtremove", and the second argument is the
 	      affected runtime (for example
 	      python<var>X</var>.<var>Y</var>).
diff -Nru python-defaults-2.7.3~rc2/debian/pyversions.py python-defaults-2.7.3/debian/pyversions.py
--- python-defaults-2.7.3~rc2/debian/pyversions.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/pyversions.py	2012-07-26 18:26:10.000000000 -0400
@@ -110,7 +110,8 @@
     else:
         return _unsupported_versions
 
-_supported_versions = None
+_supported_versions = ["python%s" % ver for ver in \
+                       os.environ.get('DEBPYTHON_SUPPORTED', '').split()]
 def supported_versions(version_only=False):
     global _supported_versions
     if not _supported_versions:
@@ -144,7 +145,9 @@
     else:
         return _supported_versions
 
-_default_version = None
+_default_version = "python%s" % os.environ.get('DEBPYTHON_DEFAULT', '')
+if _default_version == 'python':
+    _default_version = None
 def default_version(version_only=False):
     global _default_version
     if not _default_version:
diff -Nru python-defaults-2.7.3~rc2/debian/rules python-defaults-2.7.3/debian/rules
--- python-defaults-2.7.3~rc2/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -20,7 +20,7 @@
 export PVER=python2.7
 
 PREVVER	:= $(shell awk '/^python/ && NR > 1 {print substr($$2,2,length($$2)-2); exit}' debian/changelog)
-PREVVER := 2.7.3~rc2-1~
+PREVVER := 2.7.3-1~
 
 PWD		:= $(shell pwd)
 
diff -Nru python-defaults-2.7.3~rc2/debpython/debhelper.py python-defaults-2.7.3/debpython/debhelper.py
--- python-defaults-2.7.3~rc2/debpython/debhelper.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/debhelper.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff -Nru python-defaults-2.7.3~rc2/debpython/depends.py python-defaults-2.7.3/debpython/depends.py
--- python-defaults-2.7.3~rc2/debpython/depends.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/depends.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -94,11 +94,13 @@
             tpl = 'python-dbg' if dbgpkg else 'python'
             minv = pub_vers[0]
             maxv = pub_vers[-1]
-            if dbgpkg:
-                tpl2 = 'python%d.%d-dbg'
-            else:
-                tpl2 = 'python%d.%d'
-            self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))
+            # generating "python2.X | python2.Y | python2.Z" dependencies
+            # disabled (see #625740):
+            #if dbgpkg:
+            #    tpl2 = 'python%d.%d-dbg'
+            #else:
+            #    tpl2 = 'python%d.%d'
+            #self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))
 
             # additional Depends to block python package transitions
             if minv <= DEFAULT:
@@ -112,21 +114,17 @@
         if stats['compile']:
             self.depend(MINPYCDEP)
 
-        if not options.ignore_shebangs:
-            for interpreter, version in stats['shebangs']:
-                self.depend(interpreter)
+        for interpreter, version in stats['shebangs']:
+            self.depend(interpreter)
 
         for private_dir, details in stats['private_dirs'].iteritems():
-            if options.ignore_shebangs:
-                versions = []
-            else:
-                versions = list(v for i, v in details.get('shebangs', []) if v)
+            versions = list(v for i, v in details.get('shebangs', []) if v)
 
             for v in versions:
                 if v in SUPPORTED:
                     self.depend("python%d.%d" % v)
                 else:
-                    log.warn('dependency on python%s (from shebang) ignored'
+                    log.info('dependency on python%s (from shebang) ignored'
                              ' - it\'s not supported anymore', vrepr(v))
             # /usr/bin/python shebang → add python to Depends
             if any(True for i, v in details.get('shebangs', []) if v is None):
diff -Nru python-defaults-2.7.3~rc2/debpython/files.py python-defaults-2.7.3/debpython/files.py
--- python-defaults-2.7.3~rc2/debpython/files.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/files.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff -Nru python-defaults-2.7.3~rc2/debpython/namespace.py python-defaults-2.7.3/debpython/namespace.py
--- python-defaults-2.7.3~rc2/debpython/namespace.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/namespace.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2011 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2011-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff -Nru python-defaults-2.7.3~rc2/debpython/option.py python-defaults-2.7.3/debpython/option.py
--- python-defaults-2.7.3~rc2/debpython/option.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/option.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff -Nru python-defaults-2.7.3~rc2/debpython/pydist.py python-defaults-2.7.3/debpython/pydist.py
--- python-defaults-2.7.3~rc2/debpython/pydist.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/pydist.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -24,6 +24,7 @@
 import os
 import re
 from os.path import exists, isdir, join
+from string import maketrans
 from subprocess import PIPE, Popen
 from debpython.version import vrepr, getver, get_requested_versions
 from debpython.tools import memoize
@@ -41,7 +42,7 @@
         ;\s*
         (?P<standard>PEP386)?                    # PEP-386 mode
         \s*
-        (?P<rules>s/.*)?                         # translator rules
+        (?P<rules>(?:s|tr|y).*)?                 # translator rules
     )?
     """, re.VERBOSE)
 REQUIRES_RE = re.compile(r'''
@@ -117,13 +118,13 @@
     req = safe_name(name) + rest
 
     data = load()
-    req_dict = REQUIRES_RE.match(req)
-    if not req_dict:
+    req_d = REQUIRES_RE.match(req)
+    if not req_d:
         log.info('please ask dh_python2 author to fix REQUIRES_RE '
                  'or your upstream author to fix requires.txt')
         raise Exception('requirement is not valid: %s' % req)
-    req_dict = req_dict.groupdict()
-    name = req_dict['name']
+    req_d = req_d.groupdict()
+    name = req_d['name']
     details = data.get(name.lower())
     if details:
         for item in details:
@@ -134,12 +135,13 @@
             if not item['dependency']:
                 return  # this requirement should be ignored
             if item['dependency'].endswith(')'):
-                # no need to translate versions if version is hardcoded in Debian
-                # dependency
-                return item['dependency']
-            if req_dict['version']:
-                # FIXME: translate it (rules, versions)
+                # no need to translate versions if version is hardcoded in
+                # Debian dependency
                 return item['dependency']
+            if req_d['version'] and (item['standard'] or item['rules']) and\
+               req_d['operator'] not in (None, '=='):
+                v = _translate(req_d['version'], item['rules'], item['standard'])
+                return "%s (%s %s)" % (item['dependency'], req_d['operator'], v)
             else:
                 return item['dependency']
 
@@ -231,3 +233,53 @@
 def ci_regexp(name):
     """Return case insensitive dpkg -S regexp."""
     return ''.join("[%s%s]" % (i.upper(), i) if i.isalpha() else i for i in name.lower())
+
+
+PRE_VER_RE = re.compile(r'[-.]?(alpha|beta|rc|dev|a|b|c)')
+GROUP_RE = re.compile(r'\$(\d+)')
+
+
+def _pl2py(pattern):
+    """Convert Perl RE patterns used in uscan to Python's
+
+    >>> print _pl2py('foo$3')
+    foo\g<3>
+    """
+    return GROUP_RE.sub(r'\\g<\1>', pattern)
+
+
+def _translate(version, rules, standard):
+    """Translate Python version into Debian one.
+
+    >>> _translate('1.C2betac', ['s/c//gi'], None)
+    '1.2beta'
+    >>> _translate('5-fooa1.2beta3-fooD',
+    ...     ['s/^/1:/', 's/-foo//g', 's:([A-Z]):+$1:'], 'PEP386')
+    '1:5~a1.2~beta3+D'
+    >>> _translate('x.y.x.z', ['tr/xy/ab/', 'y,z,Z,'], None)
+    'a.b.a.Z'
+    """
+    for rule in rules:
+        # uscan supports s, tr and y operations
+        if rule.startswith(('tr', 'y')):
+            # Note: no support for escaped separator in the pattern
+            pos = 1 if rule.startswith('y') else 2
+            tmp = rule[pos + 1:].split(rule[pos])
+            version = version.translate(maketrans(tmp[0], tmp[1]))
+        elif rule.startswith('s'):
+            # uscan supports: g, u and x flags
+            tmp = rule[2:].split(rule[1])
+            pattern = re.compile(tmp[0])
+            count = 1
+            if tmp[2:]:
+                flags = tmp[2]
+                if 'g' in flags:
+                    count = 0
+                if 'i' in flags:
+                    pattern = re.compile(tmp[0], re.I)
+            version = pattern.sub(_pl2py(tmp[1]), version, count)
+        else:
+            log.warn('unknown rule ignored: %s', rule)
+    if standard == 'PEP386':
+        version = PRE_VER_RE.sub('~\g<1>', version)
+    return version
diff -Nru python-defaults-2.7.3~rc2/debpython/tools.py python-defaults-2.7.3/debpython/tools.py
--- python-defaults-2.7.3~rc2/debpython/tools.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/tools.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -33,7 +33,7 @@
 
 log = logging.getLogger(__name__)
 EGGnPTH_RE = re.compile(r'(.*?)(-py\d\.\d(?:-[^.]*)?)?(\.egg-info|\.pth)$')
-SHEBANG_RE = re.compile(r'^#!\s*/usr/bin/(?:env\s+)?(python(\d+\.\d+)?(?:-dbg)?).*')
+SHEBANG_RE = re.compile(r'^#!\s*(.*?/bin/.*?)(python(\d+\.\d+)?(?:-dbg)?)(?:\s(.*))?')
 SHAREDLIB_RE = re.compile(r'NEEDED.*libpython(\d\.\d)')
 INSTALL_RE = re.compile(r"""
     (?P<pattern>.+?)  # file pattern
@@ -92,6 +92,42 @@
     return os.symlink(relpath(target, link), link)
 
 
+def fix_shebang(fpath, replacement=None):
+    """Normalize file's shebang.
+
+    :param replacement: new shebang command (path to interpreter and options)
+    """
+    try:
+        with open(fpath) as fp:
+            fcontent = fp.readlines()
+        if not fcontent:
+            log.debug('fix_shebang: ignoring empty file: %s', fpath)
+            return None
+    except IOError:
+        log.error('cannot open %s', fpath)
+        return False
+
+    match = SHEBANG_RE.match(fcontent[0])
+    if not match:
+        return None
+    if not replacement:
+        path, interpreter, version, argv = match.groups()
+        if path != '/usr/bin':  # f.e. /usr/local/* or */bin/env
+            replacement = "/usr/bin/%s" % interpreter
+        if interpreter == 'python2':
+            replacement = '/usr/bin/python'
+        if replacement and argv:
+            replacement += " %s" % argv
+    if replacement:
+        log.info('replacing shebang in %s (%s)', fpath, fcontent[0])
+        # do not catch IOError here, the file is zeroed at this stage so it's
+        # better to fail dh_python2
+        with open(fpath, 'w') as fp:
+            fp.write("#! %s\n" % replacement)
+            fp.writelines(fcontent[1:])
+    return True
+
+
 def shebang2pyver(fpath):
     """Check file's shebang.
 
@@ -105,10 +141,10 @@
             if not match:
                 return None
             res = match.groups()
-            if res != (None, None):
-                if res[1]:
-                    res = res[0], getver(res[1])
-                return res
+            if res[1:3] != (None, None):
+                if res[2]:
+                    return res[1], getver(res[2])
+                return res[1], None
     except IOError:
         log.error('cannot open %s', fpath)
 
diff -Nru python-defaults-2.7.3~rc2/debpython/version.py python-defaults-2.7.3/debpython/version.py
--- python-defaults-2.7.3~rc2/debpython/version.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/version.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -22,6 +22,7 @@
 import logging
 import re
 from ConfigParser import SafeConfigParser
+from os import environ
 from os.path import exists, dirname, join
 from types import GeneratorType
 
@@ -36,18 +37,23 @@
 
 # try to read debian_defaults and get a list of supported Python versions and
 # the default one from there
-_config = SafeConfigParser()
-_config.read(['/usr/share/python/debian_defaults',
-             join(dirname(__file__), '..', 'debian', 'debian_defaults')])
+_supported = environ.get('DEBPYTHON_SUPPORTED')
+_default = environ.get('DEBPYTHON_DEFAULT')
+if not _supported or not _default:
+    _config = SafeConfigParser()
+    _config.read('/usr/share/python/debian_defaults')
+    if not _default:
+        _default = _config.get('DEFAULT', 'default-version')[6:]
+    if not _supported:
+        _supported = _config.get('DEFAULT', 'supported-versions')\
+                     .replace('python', '')
 try:
-    DEFAULT = tuple(int(i) for i in _config.get('DEFAULT',
-                    'default-version')[6:].split('.'))
+    DEFAULT = tuple(int(i) for i in _default.split('.'))
 except Exception:
     log.exception('cannot read debian_defaults')
 try:
-    SUPPORTED = tuple(tuple(int(j) for j in i.strip()[6:].split('.'))\
-                            for i in _config.get('DEFAULT',
-                                'supported-versions').split(','))
+    SUPPORTED = tuple(tuple(int(j) for j in i.strip().split('.'))
+                            for i in _supported.split(','))
 except Exception:
     log.exception('cannot read debian_defaults')
 
@@ -83,10 +89,10 @@
             versions = set(v for v in SUPPORTED if minv <= v < maxv)
 
     if available:
-        versions = set(v for v in versions \
+        versions = set(v for v in versions
                        if exists("/usr/bin/python%d.%d" % v))
     elif available is False:
-        versions = set(v for v in versions \
+        versions = set(v for v in versions
                        if not exists("/usr/bin/python%d.%d" % v))
 
     return versions
@@ -190,7 +196,7 @@
         minv = sorted(hardcoded)[0]
 
     if current:
-        versions = sorted(get("%s-%s" % (minv if minv else '', \
+        versions = sorted(get("%s-%s" % (minv if minv else '',
                                          maxv if maxv else '')))
         if not versions:
             raise ValueError("version range doesn't match installed Python versions: %s" % value)
diff -Nru python-defaults-2.7.3~rc2/dh_python2 python-defaults-2.7.3/dh_python2
--- python-defaults-2.7.3~rc2/dh_python2	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/dh_python2	2012-07-26 18:26:10.000000000 -0400
@@ -1,7 +1,7 @@
 #! /usr/bin/python
 # -*- coding: UTF-8 -*- vim: et ts=4 sw=4
 
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -42,8 +42,8 @@
 from debpython.pydist import validate as validate_pydist, \
                              PUBLIC_DIR_RE
 from debpython.tools import sitedir, relative_symlink, \
-                            shebang2pyver, so2pyver, \
-                            clean_egg_name, \
+                            fix_shebang, shebang2pyver, \
+                            so2pyver, clean_egg_name, \
                             pyinstall, pyremove
 from debpython.option import Option
 
@@ -299,7 +299,7 @@
 
 
 ### PACKAGE DETAILS ############################################
-def scan(package, dname=None, clean_dbg_pkg=True):
+def scan(package, dname=None, options=None):
     """Gather statistics about Python files in given package."""
     r = {'requires.txt': set(),
          'nsp.txt': set(),
@@ -358,7 +358,7 @@
         # handle some EGG related data (.egg-info dirs)
         for name in dirs:
             if name.endswith('.egg-info'):
-                if dbg_package and clean_dbg_pkg:
+                if dbg_package and options.clean_dbg_pkg:
                     rmtree(join(root, name))
                     dirs.remove(name)
                     continue
@@ -380,6 +380,11 @@
             fpath = join(root, fn)
             if not exists(fpath):
                 # could be removed while handling .so symlinks
+                if islink(fpath) and '.so.' in split(fpath)[-1]:
+                    # dangling symlink to (now removed/renamed) .so file
+                    # which wasn't removed yet (see test3's quux.so.0)
+                    log.info('removing symlink: %s', fpath)
+                    os.remove(fpath)
                 continue
             fext = fn.rsplit('.', 1)[-1]
             if fext in ('pyc', 'pyo'):
@@ -399,18 +404,22 @@
                             os.remove(lpath)
                         log.info('renaming %s to %s', dstfpath, fn)
                         os.rename(dstfpath, fpath)
-                if dbg_package and clean_dbg_pkg and fext not in ('so', 'h'):
+                if dbg_package and options.clean_dbg_pkg and \
+                   fext not in ('so', 'h'):
                     os.remove(join(root, fn))
                     continue
 
             elif private_dir:
-                if exists(join(root, fn)):
-                    mode = os.stat(join(root, fn))[ST_MODE]
+                if exists(fpath):
+                    mode = os.stat(fpath)[ST_MODE]
                     if mode & S_IXUSR or mode & S_IXGRP or mode & S_IXOTH:
-                        res = shebang2pyver(join(root, fn))
-                        if res:
-                            r['private_dirs'].setdefault(private_dir, {})\
-                                .setdefault('shebangs', set()).add(res)
+                        if (options.no_shebang_rewrite or \
+                            fix_shebang(fpath, options.shebang)) and \
+                           not options.ignore_shebangs:
+                            res = shebang2pyver(fpath)
+                            if res:
+                                r['private_dirs'].setdefault(private_dir, {})\
+                                    .setdefault('shebangs', set()).add(res)
 
             if public_dir or private_dir:
                 if fext == 'so':
@@ -447,11 +456,14 @@
                 continue
             # search for scripts in bin dirs
             if bin_dir:
-                res = shebang2pyver(fpath)
-                if res:
-                    r['shebangs'].add(res)
+                if (options.no_shebang_rewrite or \
+                    fix_shebang(fpath, options.shebang)) and \
+                   not options.ignore_shebangs:
+                     res = shebang2pyver(fpath)
+                     if res:
+                         r['shebangs'].add(res)
 
-    if dbg_package and clean_dbg_pkg:
+    if dbg_package and options.clean_dbg_pkg:
         # remove empty directories in -dbg packages
         proot = proot + '/usr/lib'
         for root, dirs, file_names in os.walk(proot, topdown=False):
@@ -468,7 +480,7 @@
 ################################################################
 def main():
     usage = '%prog -p PACKAGE [-V [X.Y][-][A.B]] DIR [-X REGEXPR]\n'
-    parser = OptionParser(usage, version='%prog 2.0~beta1',
+    parser = OptionParser(usage, version='%prog 2.1',
                                    option_class=Option)
     parser.add_option('--no-guessing-versions', action='store_false',
         dest='guess_versions', default=True,
@@ -514,6 +526,8 @@
         help='recreate __init__.py files for given namespaces at install time')
     parser.add_option('--clean-pycentral', action='store_true', default=False,
         help='generate maintainer script that will remove pycentral files')
+    parser.add_option('--shebang',
+        help='use given command as shebang in scripts')
     parser.add_option('--ignore-shebangs', action='store_true', default=False,
         help='do not translate shebangs into Debian dependencies')
     parser.add_option('--ignore-namespace', action='store_true', default=False,
@@ -521,6 +535,8 @@
     parser.add_option('--no-dbg-cleaning', action='store_false',
             dest='clean_dbg_pkg', default=True,
         help='do not remove files from debug packages')
+    parser.add_option('--no-shebang-rewrite', action='store_true',
+            default=False, help='do not rewrite shebangs')
     # ignore some debhelper options:
     parser.add_option('-O', help=SUPPRESS_HELP)
 
@@ -588,7 +604,7 @@
             if not pyremove(package, options.vrange):
                 exit(5)
             fix_locations(package)
-        stats = scan(package, private_dir, options.clean_dbg_pkg)
+        stats = scan(package, private_dir, options)
         if not private_dir:
             share(package, stats, options)
             pyshared_dir = "debian/%s/usr/share/pyshared/" % package
diff -Nru python-defaults-2.7.3~rc2/dh_python2.rst python-defaults-2.7.3/dh_python2.rst
--- python-defaults-2.7.3~rc2/dh_python2.rst	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/dh_python2.rst	2012-07-26 18:26:10.000000000 -0400
@@ -22,13 +22,13 @@
  * build module/application using its standard build system,
    remember to build extensions for all supported Python versions (loop over
    ``pyversions -vr``),
- * install files to the *standard* locations, add ``--install-layout=deb`` to
+ * install files to the *standard* locations, add `--install-layout=deb` to
    setup.py's install command if your package is using distutils,
- * add ``python2`` to dh's ``--with`` option, or:
- * include /usr/share/cdbs/1/class/python-distutils.mk in debian/rules and
-   depend on cdbs (>= 0.4.90), or:
- * call dh_python2 in the binary-* target,
- * add ${python:Depends} to Depends,
+ * add `python2` to dh's --with option, or:
+ * `include /usr/share/cdbs/1/class/python-distutils.mk` in debian/rules and
+   depend on `cdbs (>= 0.4.90)`, or:
+ * call ``dh_python2`` in the `binary-*` target,
+ * add `${python:Depends}` to Depends
 
 NOTES
 -----
@@ -43,11 +43,13 @@
 dependencies
 ~~~~~~~~~~~~
 dh_python2 tries to translate Python dependencies from requires.txt file to
-Debian dependencies, use debian/pydist-overrides or --no-guessing-deps option
-to override it. If you want dh_python2 to generate more strict dependencies
-(f.e. to avoid ABI problems) create debian/python-foo.pydist file. See
-/usr/share/doc/python-doc/README.PyDist (provided by python-doc package) for
-more information.
+Debian dependencies. Use debian/pydist-overrides or --no-guessing-deps option
+to override it if the guess is incorrect. If you want dh_python2 to generate
+more strict dependencies (f.e. to avoid ABI problems) create
+debian/python-foo.pydist file. See /usr/share/doc/python-doc/README.PyDist
+(provided by python-doc package) for more information. If the pydist file
+contains PEP386 flag or set of (uscan like) rules, dh_python2 will make the
+depedency versioned (version requirements are ignored by default).
 
 namespace feature
 ~~~~~~~~~~~~~~~~~
@@ -70,24 +72,33 @@
 dh_python2 with --skip-private option and add another call with a path to this
 directory and new options.
 
+debug packages
+~~~~~~~~~~~~~~
+In binary packages which name ends with `-dbg`, all files in
+`/usr/lib/python2.X/{site,dist}-packages/` directory 
+that have extensions different than `so` or `h` are removed by default.
+Use --no-dbg-cleaning option to disable this feature.
+
 pyinstall files
 ~~~~~~~~~~~~~~~
 Files listed in debian/pkg.pyinstall file will be installed as public modules
 for all requested Python versions (dh_install doesn't know about python's site-
 vs. dist-packages issue).
 
-Syntax: "path/to/file [VERSION_RANGE] [NAMESPACE]". debian directory is
-automatically removed from the path, so you can place your files in debian/
-directory and install them from this location (if you want to install them in
-"debian" namespace, set NAMESPACE to debian). If NAMESPACE is set, all listed
-files will be installed in .../dist-packages/NAMESPACE/ directory.
+Syntax: ``path/to/file [VERSION_RANGE] [NAMESPACE]``
+
+debian directory is automatically removed from the path, so you can place your
+files in debian/ directory and install them from this location (if you want to
+install them in "debian" namespace, set NAMESPACE to debian). If NAMESPACE is
+set, all listed files will be installed in .../dist-packages/NAMESPACE/
+directory.
 
 Examples:
- * `foo.py` (installs .../dist-packages/foo.py for all supported Python versions)
- * `foo/bar.py 2.6-` (installs .../dist-packages/foo/bar.py for versions >= 2.6)
- * `foo/bar.py spam` (installs .../dist-packages/spam/bar.py)
- * `debian/*.py spam.egg 2.5` (installs .../python2.5/site-packages/spam/egg/\*.py
-   files)
+ * ``foo.py`` installs .../dist-packages/foo.py for all supported Python versions
+ * ``foo/bar.py 2.6-`` installs .../dist-packages/foo/bar.py for versions >= 2.6
+ * ``foo/bar.py spam`` installs .../dist-packages/spam/bar.py
+ * ``debian/*.py spam.egg 2.5`` installs .../python2.5/site-packages/spam/egg/\*.py
+   files
 
 pyremove files
 ~~~~~~~~~~~~~~
@@ -96,8 +107,18 @@
 debian/pkg.pyremove file.
 
 Examples:
- * `*.pth` (removes .pth files from .../dist-packages/)
- * `bar/baz.py 2.5` (removes .../python2.5/site-packages/bar/baz.py)
+ * ``*.pth`` removes .pth files from .../dist-packages/
+ * ``bar/baz.py 2.5`` removes .../python2.5/site-packages/bar/baz.py
+
+overriding supported / default Python versions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you want to override system's list of supported Python versions or the
+default one (f.e. to build a package that includes symlinks for older version
+of Python or compile .py files only for given interpreter version), you can do
+that via `DEBPYTHON_SUPPORTED` and/or `DEBPYTHON_DEFAULT` env. variables.
+
+Example: ``2.5,2.7`` limits the list of supported Python versions to Python 2.5
+and Python 2.7.
 
 
 OPTIONS
@@ -112,6 +133,8 @@
 
 --no-dbg-cleaning	do not remove any files from debug packages
 
+--no-shebang-rewrite	do not rewrite shebangs
+
 --skip-private	don't check private directories
 
 -v, --verbose	turn verbose mode on
@@ -156,6 +179,8 @@
 --clean-pycentral	generate maintainer script that will remove byte code
   generated by python-central helper
 
+--shebang=COMMAND	use given command as shebang in scripts
+
 --ignore-shebangs	do not translate shebangs into Debian dependencies
 
 SEE ALSO
diff -Nru python-defaults-2.7.3~rc2/Makefile python-defaults-2.7.3/Makefile
--- python-defaults-2.7.3~rc2/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -30,6 +30,9 @@
 %.1: %.rst
 	rst2man $< > $@
 
+%.html: %.rst
+	rst2html $< > $@
+
 manpages: $(MANPAGES)
 
 dist_fallback:
diff -Nru python-defaults-2.7.3~rc2/pyclean python-defaults-2.7.3/pyclean
--- python-defaults-2.7.3~rc2/pyclean	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pyclean	2012-07-26 18:26:10.000000000 -0400
@@ -1,8 +1,7 @@
 #! /usr/bin/python
-# -*- coding: UTF-8 -*-
-# vim: et ts=4 sw=4
-
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# -*- coding: UTF-8 -*- vim: et ts=4 sw=4
+#
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
diff -Nru python-defaults-2.7.3~rc2/pycompile python-defaults-2.7.3/pycompile
--- python-defaults-2.7.3~rc2/pycompile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pycompile	2012-07-26 18:26:10.000000000 -0400
@@ -1,8 +1,7 @@
 #! /usr/bin/python
-# -*- coding: utf-8 -*-
-# vim: et ts=4 sw=4
-
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# -*- coding: utf-8 -*- vim: et ts=4 sw=4
+#
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 # Copyright © 2010 Canonical Ltd
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
diff -Nru python-defaults-2.7.3~rc2/pydist/dist_fallback python-defaults-2.7.3/pydist/dist_fallback
--- python-defaults-2.7.3~rc2/pydist/dist_fallback	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pydist/dist_fallback	2012-07-26 18:26:10.000000000 -0400
@@ -2,7 +2,9 @@
 setuptools python-pkg-resources
 wsgiref python (>= 2.5) | python-wsgiref
 argparse python (>= 2.7) | python-argparse
+pil python-imaging
 AddOns python-peak.util
+BatchModify trac-batchmodify
 BitTornado bittornado
 BitTorrent bittorrent
 Bitten trac-bitten-slave
@@ -10,12 +12,12 @@
 BytecodeAssembler python-peak.util
 BzrPipeline bzr-pipeline
 BzrTools bzrtools
+Calendar_and_Contacts_Server calendarserver
 CedarBackup2 cedar-backup2
 CherryPy python-cherrypy3
 CherryTree cherrytree
 ClusterShell clustershell
 Codeville codeville
-Connectome_Viewer connectomeviewer
 ControlAula controlaula
 CoverageTestRunner python-coverage-test-runner
 DITrack ditrack
@@ -36,12 +38,12 @@
 GaussSum gausssum
 GeoIP_Python python-geoip
 GitPython python-git
-Gufw gufw
 HarvestMan harvestman
 ISO8583_Module python-iso8583
 Ibid ibid
 JCC jcc
 Loom bzr-loom
+MAT mat
 Magic_file_extensions python-magic
 Mirage mirage
 Mnemosyne mnemosyne
@@ -75,15 +77,17 @@
 PyWavelets python-pywt
 PyWebDAV python-webdav
 PyYAML python-yaml
+Py_ python-py++
 Pygmy pygmy
 Pyjamas pyjamas-pyjs
 Pymacs pymacs
-Pyste libboost-python1.46-dev
+Pyste libboost-python1.49-dev
 PythonDaap python-daap
 QuantLib_Python quantlib-python
 Quixote python-quixote1
+Ren_Py python-renpy
+Roadmap_Plugin trac-roadmap
 RunSnakeRun runsnakerun
-SSSDConfig python-sss
 ScientificPython python-scientific
 Shinken shinken-core
 Sonata sonata
@@ -106,7 +110,7 @@
 TracHTTPAuth trac-httpauth
 TracMasterTickets trac-mastertickets
 TracMercurial trac-mercurial
-TracPrivateTickets trac-privateticketsplugin
+TracPrivateTickets trac-privatetickets
 TracSpamFilter trac-spamfilter
 TracSubTicketsPlugin trac-subtickets
 TracTags trac-tags
@@ -119,15 +123,20 @@
 Turtle_Art turtleart
 UNKNOWN python-pdfrw
 UnknownHorizons unknown-horizons
+VirtualMailManager vmm
 WikiTableMacro trac-wikitablemacro
 Wikkid wikkid
+WordPress_Library python-wordpresslib
+X_Tile x-tile
 ZODB3 python-zodb
 _tifffile tifffile
 activity_log_manager activity-log-manager
 adns_python python-adns
 agtl agtl
+alembic alembic
 allmydata_tahoe tahoe-lafs
 apache_libcloud python-libcloud
+apparmor apparmor-utils
 apt_clone apt-clone
 apt_p2p apt-p2p
 apt_xapian_index apt-xapian-index
@@ -138,12 +147,13 @@
 archmage archmage
 arcjobtool arcjobtool
 arista arista
-astk code-aster-run
 atheist atheist
 autokey autokey-common
+beautifulsoup4 python-bs4
 bicyclerepair bicyclerepair
 bitbake bitbake
 bley bley
+bookletimposer bookletimposer
 bpython bpython
 buildbot buildbot
 buildbot_slave buildbot-slave
@@ -159,8 +169,6 @@
 bzr_git bzr-git
 bzr_grep bzr-grep
 bzr_gtk bzr-gtk
-bzr_hg bzr-hg
-bzr_pqm bzr-pqm
 bzr_rewrite bzr-rewrite
 bzr_search bzr-search
 bzr_stats bzr-stats
@@ -168,6 +176,7 @@
 bzr_upload bzr-upload
 bzr_xmloutput bzr-xmloutput
 cappuccino cappuccino
+carbon graphite-carbon
 cardstories cardstories
 cfget cfget
 chirp chirp
@@ -176,29 +185,30 @@
 cmdtest cmdtest
 cpuset cpuset
 cvs2svn cvs2svn
-cwm python-swap
 d_feet d-feet
 d_rats d-rats
+datapm datapm
+dblatex dblatex
 dctrl2xml dctrl2xml
 debpartial_mirror debpartial-mirror
 deluge deluge-common
 devscripts devscripts
 dicompyler dicompyler
+dispcalGUI dispcalgui
 dissy dissy
 djagios djagios
 django_ajax_selects django-ajax-selects
 django_filter django-filter
 django_openid_auth python-django-auth-openid
-django_tables django-tables
+django_tables2 django-tables
 django_tastypie python-tastypie
 djextdirect python-django-extdirect
+dkimpy python-dkim
 dot2tex dot2tex
 driconf driconf
 dtrx dtrx
 duplicity duplicity
 dvcs_autosync dvcs-autosync
-earcandy earcandy
-ears ears
 eficas eficas
 elisa python-moovida
 elisa_plugin_amazon moovida-plugins-bad
@@ -243,10 +253,10 @@
 fontypython fontypython
 frescobaldi frescobaldi
 fts fts
+fts_clacks fts-clacks
 fts_fai fts-fai-ldap
 fts_ltsp fts-ltsp-ldap
 fts_opsi fts-opsi
-funkload funkload
 fuse_python python-fuse
 fusil fusil
 fusion_icon fusion-icon
@@ -255,16 +265,19 @@
 gameclock gameclock
 gaphor gaphor
 gastablesgui gastables
+gbp git-buildpackage
 gdevilspie gdevilspie
 gdmodule python-gd
 genbackupdata genbackupdata
 getmail getmail4
 geximon geximon
-git_build_package git-buildpackage
+git_review git-review
 github_cli github-cli
 giws giws
 gjots2 gjots2
+glipper glipper
 globs globs
+glue glue-sprite
 gmobilemedia gmobilemedia
 gnome_activity_journal gnome-activity-journal
 gnome_app_install gnome-codec-install
@@ -286,39 +299,43 @@
 hellanzb hellanzb
 hgnested mercurial-nested
 hgsvn hgsvn
+hitchhhiker hitchhiker
 hotwire hotwire
+httpcode httpcode
+httpie httpie
 hyde hyde
 ibus_tegaki ibus-tegaki
 icalview trac-icalviewplugin
 identicurse identicurse
 imposm.parser python-imposm-parser
-include_server distcc-pump
 iotop iotop
 ipython ipython
 isoquery isoquery
 jack jack
 jsb jsonbot
+juju juju
 kedpm kedpm
+keepnote keepnote
 key_mon key-mon
 keymapper keymapper
 kiki kiki
 lastfmsubmitd lastfmsubmitd
 lazygal lazygal
+legit legit
 libsbml libsbml5-python
 libtpclient_py python-tp-client
 libtpproto_py python-tp-netlib
 lio lio-utils
-live_magic live-magic
 llnl_babel python-sidl
 llnl_babel_sidl_sidlx python-sidl
 loggerhead loggerhead
 londonlaw londonlaw
 lptools lptools
 lshell lshell
-lucene pylucene
 ludev_t ludevit
 lybniz lybniz
 mayavi mayavi2
+mcomix mcomix
 mecab_python python-mecab
 mercurial mercurial-common
 mic mic2
@@ -326,6 +343,7 @@
 mingc python-ming
 mini_dinstall mini-dinstall
 miro miro
+mitmproxy mitmproxy
 mod_python libapache2-mod-python
 moin python-moinmoin
 moosic moosic
@@ -333,10 +351,13 @@
 mpDris mpdris
 museek_python_bindings python-museek
 musiclibrarian musiclibrarian
+mysql_utilities mysql-utilities
+nautilus_pastebin nautilus-pastebin
 neso tryton-neso
 netsnmp_python libsnmp-python
 nfoview nfoview
 nglister nglister
+nml nml
 nsscache nsscache
 nxt_python python-nxt
 obMenu obmenu
@@ -352,11 +373,12 @@
 openstack.common python-openstack-common
 osc osc
 pYsearch python-yahoo
-pdfposter pdfposter
+pbundler pbundler
 pdfshuffler pdfshuffler
 pep8 pep8
 perroquet perroquet
-picard picard
+pgxnclient pgxnclient
+photofilmstrip photofilmstrip
 pithos pithos
 pkpgcounter pkpgcounter
 playitslowly playitslowly
@@ -374,17 +396,16 @@
 puddletag puddletag
 purity_ng purity-ng
 pyExcelerator python-excelerator
+pyFAI pyfai
 pyLibravatar python-libravatar
 pyOpenSSL python-openssl
 pyPortMidi python-pypm
 py_Asterisk python-asterisk
 py_pypcap python-pypcap
 py_rrdtool python-rrdtool
-py_sendfile python-sendfile
 pyacidobasic python-acidobasic
 pyacoustid python-acoustid
 pyalsaaudio python-alsaaudio
-pybackpack pybackpack
 pybloom python-bloomfilter
 pybridge pybridge
 pybtex pybtex
@@ -394,7 +415,6 @@
 pychm python-chm
 pycrypto python-crypto
 pydicom python-dicom
-pydkim python-dkim
 pydns python-dns
 pyenchant python-enchant
 pyepr python-epr
@@ -404,12 +424,13 @@
 pygopherd pygopherd
 pygpgme python-gpgme
 pygpiv python-gpiv
+pygrib python-grib
 pyliblo python-liblo
 pyliblzma python-lzma
 pylibpcap python-libpcap
-pylibssh2 python-libssh2
 pylibtiff python-libtiff
 pylint pylint
+pylogsparser python-logsparser
 pymecavideo python-mecavideo
 pymilter python-milter
 pymol pymol
@@ -420,17 +441,17 @@
 pynids python-nids
 pynifti python-nifti
 pyogg python-ogg
+pyp pyp
 pyparallel python-parallel
 pyppd pyppd
 pyprompter pyprompter
-pyqonsole pyqonsole
 pyremctl python-remctl
 pyrit pyrit
 pyrite_publisher pyrite-publisher
 pysane python-imaging-sane
 pysatellites python-satellites
 pyserial python-serial
-pysnmp python-pysnmp2
+pysnmp python-pysnmp4
 pysnmp_apps python-pysnmp4-apps
 pysnmp_mibs python-pysnmp4-mibs
 pysparse python-sparse
@@ -439,6 +460,7 @@
 pysqlite python-pysqlite1.1
 pystatgrab python-statgrab
 pysubnettree python-subnettree
+pysurfer python-surfer
 pytagsfs pytagsfs
 pytcpwrap python-tcpwrap
 python2_biggles python-pybiggles
@@ -468,12 +490,6 @@
 qpid_python python-qpid
 qpid_qmf python-qpid-extras-qmf
 qpid_tools qpid-tools
-quantum_cisco_plugin quantum-plugin-cisco
-quantum_client quantum-client
-quantum_common quantum-common
-quantum_openvswitch_plugin quantum-plugin-openvswitch
-quantum_sample_plugin quantum-plugin-sample
-quantum_server quantum-server
 quisk quisk
 quodlibet exfalso
 qweborf qweborf
@@ -489,7 +505,6 @@
 relational_pyside relational
 relational_readline relational-cli
 remuco remuco-base
-renpy_module python-renpy
 repoze.what.plugins.sql python-repoze.what-plugins
 repoze.what.plugins.xml python-repoze.what-plugins
 repoze.what_pylons python-repoze.what-plugins
@@ -502,19 +517,28 @@
 roundup roundup
 rpl rpl
 rst2pdf rst2pdf
+rubber rubber
+salt salt-common
 scikit_learn python-sklearn
+scikits_image python-skimage
 screenlets screenlets
 seivot seivot
+sensitivetickets trac-sensitivetickets
+servefile servefile
 sessioninstaller sessioninstaller
 shedskin shedskin
-skeinforge skeinforge
 slapos.core slapos-client
+slimit slimit
 smart python-smartpm
 snimpy snimpy
 spambayes spambayes
 spectacle spectacle
 specto specto
+sphinxcontrib_actdiag python-sphinxcontrib.actdiag
+sphinxcontrib_blockdiag python-sphinxcontrib.blockdiag
 sphinxcontrib_issuetracker python-sphinxcontrib.issuetracker
+sphinxcontrib_nwdiag python-sphinxcontrib.nwdiag
+sphinxcontrib_seqdiag python-sphinxcontrib.seqdiag
 sphinxcontrib_spelling python-sphinxcontrib.spelling
 spyder python-spyderlib
 sqlalchemy_migrate python-migrate
@@ -524,8 +548,7 @@
 supervisor supervisor
 supybot supybot
 svnmailer svnmailer
-synce_kpm synce-kpm
-synce_sync_engine synce-sync-engine
+synaptiks kde-config-touchpad
 tailor tailor
 targetcli targetcli
 tcm lio-utils
@@ -535,11 +558,12 @@
 tegaki_tools python-tegakitools
 tegaki_train tegaki-train
 tgext.crud python-tgext.admin
+tilelite tilelite
 tinyeartrainer tinyeartrainer
 tortoisehg tortoisehg
 transifex_client transifex-client
 translate_toolkit translate-toolkit
-trash trash-cli
+trash_cli trash-cli
 trimage trimage
 tritium tritium
 tryton tryton-client
@@ -600,9 +624,9 @@
 udev_discover udev-discover
 ufw ufw
 unattended_upgrades unattended-upgrades
-undertaker undertaker
 unittest_xml_reporting python-xmlrunner
 urlscan urlscan
+vamos undertaker
 vboxapi virtualbox
 virtaal virtaal
 virtinst virtinst
@@ -610,6 +634,7 @@
 virtualenvwrapper virtualenvwrapper
 wammu wammu
 web.py python-webpy
+weboob python-weboob-core
 whyteboard whyteboard
 wikipediafs wikipediafs
 winpdb winpdb
@@ -619,12 +644,10 @@
 xml_marshaller python-xmlmarshaller
 xmldiff xmldiff
 xmms2tray xmms2tray
-xxdiff_scripts xxdiff-scripts
 yagtd yagtd
 yokadi yokadi
 yum_metadata_parser python-sqlitecachec
 zenmap zenmap
 zeroinstall_injector zeroinstall-injector
-zhone zhone-illume-glue
 zim zim
 zinnia_python python-zinnia
diff -Nru python-defaults-2.7.3~rc2/pydist/generate_fallback_list.py python-defaults-2.7.3/pydist/generate_fallback_list.py
--- python-defaults-2.7.3~rc2/pydist/generate_fallback_list.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-07-26 18:26:10.000000000 -0400
@@ -72,4 +72,6 @@
 fp.write('setuptools python-pkg-resources\n')
 fp.write('wsgiref python (>= 2.5) | python-wsgiref\n')
 fp.write('argparse python (>= 2.7) | python-argparse\n')
+# wasn't recognized due to .pth file (egg-info is in PIL/ and not in *-packages/)
+fp.write('pil python-imaging\n')
 fp.writelines(result)
diff -Nru python-defaults-2.7.3~rc2/python2.pm python-defaults-2.7.3/python2.pm
--- python-defaults-2.7.3~rc2/python2.pm	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/python2.pm	2012-07-26 18:26:10.000000000 -0400
@@ -5,7 +5,7 @@
 use strict;
 use Debian::Debhelper::Dh_Lib;
 
-insert_after("dh_perl", "dh_python2");
+insert_before("dh_installinit", "dh_python2");
 remove_command("dh_pycentral");
 remove_command("dh_pysupport");
 
diff -Nru python-defaults-2.7.3~rc2/tests/common.mk python-defaults-2.7.3/tests/common.mk
--- python-defaults-2.7.3~rc2/tests/common.mk	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/common.mk	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,12 @@
+#!/usr/bin/make -f
+
+export DEBPYTHON_DEFAULT ?= $(shell sed -rne 's,^default-version = python(.*),\1,p' ../../debian/debian_defaults)
+export DEBPYTHON_SUPPORTED ?= $(shell sed -rne '/^supported-versions/{s/^supported-versions = (.*)/\1/g;s/python//g;s/,//g;p}' ../../debian/debian_defaults)
+
+all: run check
+
+run: clean
+	dpkg-buildpackage -b -us -uc
+
+clean-common:
+	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/Makefile python-defaults-2.7.3/tests/Makefile
--- python-defaults-2.7.3~rc2/tests/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,7 +1,7 @@
 #!/usr/bin/make -f
 
 # enable or disable tests here:
-TESTS := test1 test2 test3 test4 test5 test6
+TESTS := test1 test2 test3 test4 test5 test6 test7
 
 all: $(TESTS)
 
diff -Nru python-defaults-2.7.3~rc2/tests/t1/debian/pydist-overrides python-defaults-2.7.3/tests/t1/debian/pydist-overrides
--- python-defaults-2.7.3~rc2/tests/t1/debian/pydist-overrides	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/debian/pydist-overrides	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 Mako python-mako (>= 0.2)
 SQLAlchemy python-sqlalchemy (>= 0.6)
-Foo python-foo
+Foo python-foo; PEP386 s/^/2:/
 Bar python-bar
 Baz
diff -Nru python-defaults-2.7.3~rc2/tests/t1/debian/rules python-defaults-2.7.3/tests/t1/debian/rules
--- python-defaults-2.7.3~rc2/tests/t1/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -12,5 +12,5 @@
 	DH_VERBOSE=1 ../../dh_python2\
 		--depends 'SQLAlchemy >= 0.6.1'\
 		--recommends Mako\
-		--suggests 'Foo >= 0.1'\
+		--suggests 'Foo >= 0.1rc2'\
 		--suggests 'bar >= 1.0'
diff -Nru python-defaults-2.7.3~rc2/tests/t1/Makefile python-defaults-2.7.3/tests/t1/Makefile
--- python-defaults-2.7.3~rc2/tests/t1/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,20 +1,16 @@
 #!/usr/bin/make -f
 
-all: run check
-
-DPY=$(shell PYTHONPATH=../../ python -c 'import debpython.version as v; print(v.vrepr(v.DEFAULT))')
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+DPY=$(DEBPYTHON_DEFAULT)
 
 check:
 	grep -q "Depends: .*python-mako" debian/python-foo/DEBIAN/control
+	grep -q 'python-foo (>= 2:0.1~rc2)' debian/python-foo/DEBIAN/control
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo/__init__.py
 	test ! -f debian/python-foo/usr/lib/python2.6/dist-packages/foo/spam.py
 	grep -q "Depends: .*python (<<" debian/python-foo/DEBIAN/control
 	[ `readlink debian/python-foo/usr/lib/python$(DPY)/dist-packages/foo/absolute_link_to_tmp` = /tmp ]
 	[ `readlink debian/python-foo/usr/lib/python$(DPY)/dist-packages/foo/link_to_parent_dir` = .. ]
 
-clean:
-	./debian/rules clean
+clean: clean-common
 	rm -rf lib/Foo.egg-info
diff -Nru python-defaults-2.7.3~rc2/tests/t2/Makefile python-defaults-2.7.3/tests/t2/Makefile
--- python-defaults-2.7.3~rc2/tests/t2/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t2/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,16 +1,10 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo.py
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/bar/bar.py
 	grep -q pycompile debian/python-foo/DEBIAN/postinst
 	grep -q pyclean debian/python-foo/DEBIAN/prerm
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t3/debian/rules python-defaults-2.7.3/tests/t3/debian/rules
--- python-defaults-2.7.3~rc2/tests/t3/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t3/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -19,4 +19,12 @@
 		/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
+	# ... second style of 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/quux.so.0.0.0
+	dh_link /usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0 \
+		/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	dh_link /usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0 \
+		/usr/lib/python${DPY}/dist-packages/foo/quux.so
+	# ... and complex multiple symlinks
 	DH_VERBOSE=1 ../../dh_python2
diff -Nru python-defaults-2.7.3~rc2/tests/t3/Makefile python-defaults-2.7.3/tests/t3/Makefile
--- python-defaults-2.7.3~rc2/tests/t3/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t3/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,11 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-DPY=$(shell PYTHONPATH=../../ python -c 'import debpython.version as v; print(v.vrepr(v.DEFAULT))')
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+DPY=$(DEBPYTHON_DEFAULT)
 
 check:
 	grep -q "pycompile -p python-foo /usr/lib/python-foo -V $(DPY)"\
@@ -17,7 +13,10 @@
 	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
+	test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so
+	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	test ! -L debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0
 
-clean:
-	./debian/rules clean
+clean: clean-common
 	rm -rf lib/Foo.egg-info build
diff -Nru python-defaults-2.7.3~rc2/tests/t4/Makefile python-defaults-2.7.3/tests/t4/Makefile
--- python-defaults-2.7.3~rc2/tests/t4/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t4/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	grep -q python2.6 debian/foo/usr/share/foo/foo.py
@@ -14,6 +11,3 @@
 	grep -q python2.4 debian/foo/usr/share/foo/baz.py
 	test ! -x debian/foo/usr/share/foo/baz.py
 	grep -q Depends:.*python2.4 debian/foo/DEBIAN/control && false || true
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t5/Makefile python-defaults-2.7.3/tests/t5/Makefile
--- python-defaults-2.7.3~rc2/tests/t5/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t5/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	# test dh_python2
@@ -29,6 +26,3 @@
 	do [ `ls debian/python-foo/usr/lib/python2.*/*-packages/$$i/__init__.py 2>/dev/null || true | wc -l` = 0 ];\
 	[ `ls debian/python-foo/usr/lib/python2.*/*-packages/$$i/__init__.pyc 2>/dev/null || true | wc -l` = 0 ];\
 	done
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t6/Makefile python-defaults-2.7.3/tests/t6/Makefile
--- python-defaults-2.7.3~rc2/tests/t6/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t6/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	# python2.4 hardcoded via `dh_python2 -V 2.4`
@@ -19,6 +16,3 @@
 	grep -q Depends:.*python2.6 debian/foo/DEBIAN/control
 	grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate
 	grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t7/bar.py python-defaults-2.7.3/tests/t7/bar.py
--- python-defaults-2.7.3~rc2/tests/t7/bar.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/bar.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/bin/env python
+"env in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/baz.py python-defaults-2.7.3/tests/t7/baz.py
--- python-defaults-2.7.3~rc2/tests/t7/baz.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/baz.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/local/bin/python
+"/usr/local in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/changelog python-defaults-2.7.3/tests/t7/debian/changelog
--- python-defaults-2.7.3~rc2/tests/t7/debian/changelog	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/changelog	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,5 @@
+foo (1.0) unstable; urgency=low
+
+  * Initial release
+
+ -- Piotr Ożarowski <piotr@debian.org>  Sun, 10 Jun 2012 14:09:45 +0200
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/compat python-defaults-2.7.3/tests/t7/debian/compat
--- python-defaults-2.7.3~rc2/tests/t7/debian/compat	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/compat	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+8
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/control python-defaults-2.7.3/tests/t7/debian/control
--- python-defaults-2.7.3~rc2/tests/t7/debian/control	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/control	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,13 @@
+Source: foo
+Section: misc
+Priority: optional
+Maintainer: Piotr Ożarowski <piotr@debian.org>
+Build-Depends: debhelper (>= 7.0.50~)
+Build-Depends-Indep: python
+Standards-Version: 3.9.3
+
+Package: foo
+Architecture: all
+Depends: ${python:Depends}, ${misc:Depends}
+Description: example 7 - shebangs
+ exemple package #7 - shebang related tests
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/copyright python-defaults-2.7.3/tests/t7/debian/copyright
--- python-defaults-2.7.3~rc2/tests/t7/debian/copyright	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/copyright	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+The Debian packaging is © 2012, Piotr Ożarowski <piotr@debian.org> and
+is licensed under the MIT License.
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/install python-defaults-2.7.3/tests/t7/debian/install
--- python-defaults-2.7.3~rc2/tests/t7/debian/install	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/install	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,7 @@
+foo.py /usr/share/foo/
+baz.py /usr/share/foo/
+spam.py /usr/share/foo/
+bar.py /usr/share/bar/
+spam.py /usr/share/bar/
+baz.py /usr/share/baz24/
+spam.py /usr/share/baz24/
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/rules python-defaults-2.7.3/tests/t7/debian/rules
--- python-defaults-2.7.3~rc2/tests/t7/debian/rules	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+%:
+	dh $@ --buildsystem=python_distutils
+
+override_dh_pysupport:
+	DH_VERBOSE=1 ../../dh_python2
+	DH_VERBOSE=1 ../../dh_python2 /usr/share/bar
+	DH_VERBOSE=1 ../../dh_python2 /usr/share/baz24 --shebang '/usr/bin/python2.4 -OO'
+
+clean:
+	dh_clean
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/source/format python-defaults-2.7.3/tests/t7/debian/source/format
--- python-defaults-2.7.3~rc2/tests/t7/debian/source/format	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/source/format	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+3.0 (native)
diff -Nru python-defaults-2.7.3~rc2/tests/t7/foo.py python-defaults-2.7.3/tests/t7/foo.py
--- python-defaults-2.7.3~rc2/tests/t7/foo.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/foo.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/local/bin/python2.6
+"/usr/local/bin/python2.6 hardcoded in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/Makefile python-defaults-2.7.3/tests/t7/Makefile
--- python-defaults-2.7.3~rc2/tests/t7/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+
+include ../common.mk
+clean: clean-common
+
+check:
+	# python2.4 hardcoded via `dh_python2 -shebang ...python2.4`
+	grep -q '\-V 2.4 /usr/share/baz24' debian/foo/usr/share/python/runtime.d/foo.rtupdate
+	grep -q '/usr/share/baz24 \-V 2.4' debian/foo/DEBIAN/postinst
+	grep -q '#! /usr/bin/python2.4 -OO' debian/foo/usr/share/baz24/baz.py
+	# python2.6 hardcoded via shebang
+	grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate
+	grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst
+	# /env removed from shebang 
+	grep -q '#! /usr/bin/python' debian/foo/usr/share/bar/bar.py
+	# /local removed from shebang 
+	grep -q '#! /usr/bin/python' debian/foo/usr/share/foo/baz.py
+	grep -q '#! /usr/bin/python2.6' debian/foo/usr/share/foo/foo.py
diff -Nru python-defaults-2.7.3~rc2/tests/t7/spam.py python-defaults-2.7.3/tests/t7/spam.py
--- python-defaults-2.7.3~rc2/tests/t7/spam.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/spam.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+print('spam')

Reply to: