[Reproducible-builds] [dh-python] 29/183: add PyPy support

Jérémy Bobbio lunar at moszumanska.debian.org
Fri Sep 19 15:30:16 UTC 2014


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch pu/reproducible_builds
in repository dh-python.

commit 7959b9d92641df5ef1994d6a84d667fb339fb489
Author: Piotr Ożarowski <piotr at debian.org>
Date:   Tue Jul 2 21:41:27 2013 +0200

    add PyPy support
---
 Makefile                         |   5 +-
 autoscripts/postinst-pypycompile |   5 +
 autoscripts/prerm-pypyclean      |   6 +
 debian/manpages                  |   1 +
 dh/pypy.pm                       |  10 ++
 dh_pypy                          | 243 +++++++++++++++++++++++++++++++++++++++
 dh_pypy.rst                      | 119 +++++++++++++++++++
 tests/Makefile                   |   2 +-
 tests/common.mk                  |   2 +
 tests/t101/Makefile              |  17 +++
 tests/t101/debian/changelog      |   5 +
 tests/t101/debian/compat         |   1 +
 tests/t101/debian/control        |  13 +++
 tests/t101/debian/copyright      |   2 +
 tests/t101/debian/rules          |  18 +++
 tests/t101/debian/source/format  |   1 +
 16 files changed, 448 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 63e1a12..9ae5d0b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 #!/usr/bin/make -f
 INSTALL ?= install
 PREFIX ?= /usr/local
-MANPAGES ?= pybuild.1 dh_python2.1 dh_python3.1
+MANPAGES ?= pybuild.1 dh_pypy.1 dh_python2.1 dh_python3.1
 DVERSION=$(shell dpkg-parsechangelog | sed -rne 's,^Version: (.+),\1,p' || echo 'DEVEL')
 VERSION=$(shell dpkg-parsechangelog | sed -rne 's,^Version: ([^-]+).*,\1,p' || echo 'DEVEL')
 
@@ -25,13 +25,16 @@ install:
 	$(INSTALL) -m 644 dhpython/*.py $(DESTDIR)$(PREFIX)/share/dh-python/dhpython/
 	$(INSTALL) -m 644 dhpython/build/*.py $(DESTDIR)$(PREFIX)/share/dh-python/dhpython/build/
 	$(INSTALL) -m 755 pybuild $(DESTDIR)$(PREFIX)/bin/
+	$(INSTALL) -m 755 dh_pypy $(DESTDIR)$(PREFIX)/share/dh-python/
 	$(INSTALL) -m 755 dh_python2 $(DESTDIR)$(PREFIX)/bin/
 	$(INSTALL) -m 755 dh_python3 $(DESTDIR)$(PREFIX)/bin/
 	sed -i -e 's/DEVELV/$(DVERSION)/' $(DESTDIR)$(PREFIX)/bin/pybuild
+	sed -i -e 's/DEVELV/$(DVERSION)/' $(DESTDIR)$(PREFIX)/share/dh-python/dh_pypy
 	sed -i -e 's/DEVELV/$(DVERSION)/' $(DESTDIR)$(PREFIX)/bin/dh_python2
 	sed -i -e 's/DEVELV/$(DVERSION)/' $(DESTDIR)$(PREFIX)/bin/dh_python3
 	
 	$(INSTALL) -m 644 dh/pybuild.pm $(DESTDIR)$(PREFIX)/share/perl5/Debian/Debhelper/Buildsystem/
+	$(INSTALL) -m 644 dh/pypy.pm $(DESTDIR)$(PREFIX)/share/perl5/Debian/Debhelper/Sequence/
 	$(INSTALL) -m 644 dh/python2.pm $(DESTDIR)$(PREFIX)/share/perl5/Debian/Debhelper/Sequence/
 	$(INSTALL) -m 644 dh/python3.pm $(DESTDIR)$(PREFIX)/share/perl5/Debian/Debhelper/Sequence/
 	$(INSTALL) -m 644 autoscripts/* $(DESTDIR)$(PREFIX)/share/debhelper/autoscripts/
diff --git a/autoscripts/postinst-pypycompile b/autoscripts/postinst-pypycompile
new file mode 100644
index 0000000..1db399c
--- /dev/null
+++ b/autoscripts/postinst-pypycompile
@@ -0,0 +1,5 @@
+if which pypycompile >/dev/null 2>&1; then
+	pypycompile -p #PACKAGE# #ARGS#
+elif pypy -m py_compile >/dev/null 2>&1; then
+	dpkg -L #PACKAGE# | grep '\.py$' | pypy -m py_compile - >/dev/null
+fi
diff --git a/autoscripts/prerm-pypyclean b/autoscripts/prerm-pypyclean
new file mode 100644
index 0000000..e6d7d3e
--- /dev/null
+++ b/autoscripts/prerm-pypyclean
@@ -0,0 +1,6 @@
+if which pypyclean >/dev/null 2>&1; then
+	pypyclean -p #PACKAGE# #ARGS#
+else
+	dpkg -L #PACKAGE# | grep '\.py$' | sed -r 's,/([^/]*).py$,/__pycache__/\1\.*,' | xargs rm
+	find /usr/lib/pypy/dist-packages/ -type d -name __pycache__ -empty | xargs rmdir
+fi
diff --git a/debian/manpages b/debian/manpages
index 881b6a3..820706e 100644
--- a/debian/manpages
+++ b/debian/manpages
@@ -1,3 +1,4 @@
 pybuild.1
 dh_python2.1
+dh_pypy.1
 dh_python3.1
diff --git a/dh/pypy.pm b/dh/pypy.pm
new file mode 100644
index 0000000..7d1c58c
--- /dev/null
+++ b/dh/pypy.pm
@@ -0,0 +1,10 @@
+#! /usr/bin/perl
+# debhelper sequence file for dh_pypy
+
+use warnings;
+use strict;
+use Debian::Debhelper::Dh_Lib;
+
+insert_before("dh_installinit", "dh_pypy");
+
+1
diff --git a/dh_pypy b/dh_pypy
new file mode 100755
index 0000000..962cc28
--- /dev/null
+++ b/dh_pypy
@@ -0,0 +1,243 @@
+#! /usr/bin/python3
+# vim: et ts=4 sw=4
+
+# Copyright © 2013 Piotr Ożarowski <piotr at 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
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import logging
+import os
+import re
+import sys
+from optparse import OptionParser, SUPPRESS_HELP
+from os.path import exists, join
+from shutil import copy as fcopy
+from dhpython.debhelper import DebHelper
+from dhpython.depends import Dependencies
+from dhpython.interpreter import Interpreter, EXTFILE_RE
+from dhpython.version import supported, default, Version, VersionRange
+from dhpython.pydist import validate as validate_pydist
+from dhpython.fs import fix_locations, Scan
+from dhpython.option import Option
+
+# initialize script
+logging.basicConfig(format='%(levelname).1s: dh_pypy '
+                           '%(module)s:%(lineno)d: %(message)s')
+log = logging.getLogger('dhpython')
+os.umask(0o22)
+DEFAULT = default('pypy')
+SUPPORTED = supported('pypy')
+
+
+class Scanner(Scan):
+    def handle_ext(self, fpath):
+        path, fname = fpath.rsplit('/', 1)
+        tagver = EXTFILE_RE.search(fname)
+        if tagver is None:
+            return
+        tagver = tagver.groupdict()['ver']
+        if tagver is None:
+            return
+        tagver = Version("%s.%s" % (tagver[0], tagver[1]))
+        return tagver
+
+
+def main():
+    usage = '%prog -p PACKAGE [-V [X.Y][-][A.B]] DIR [-X REGEXPR]\n'
+    parser = OptionParser(usage, version='%prog DEVELV', option_class=Option)
+    parser.add_option('--no-guessing-deps', action='store_false',
+                      dest='guess_deps', default=True,
+                      help='disable guessing dependencies')
+    parser.add_option('--skip-private', action='store_true', default=False,
+                      help='don\'t check private directories')
+    parser.add_option('-v', '--verbose', action='store_true', default=False,
+                      help='turn verbose mode on')
+    # arch=False->arch:all only, arch=True->arch:any only, None->all of them
+    parser.add_option('-i', '--indep', action='store_false',
+                      dest='arch', default=None,
+                      help='act on architecture independent packages')
+    parser.add_option('-a', '-s', '--arch', action='store_true',
+                      dest='arch', help='act on architecture dependent packages')
+    parser.add_option('-q', '--quiet', action='store_false', dest='verbose',
+                      help='be quiet')
+    parser.add_option('-p', '--package', action='append',
+                      help='act on the package named PACKAGE')
+    parser.add_option('-N', '--no-package', action='append',
+                      help='do not act on the specified package')
+    parser.add_option('--compile-all', action='store_true', default=False,
+                      help='compile all files from given private directory '
+                           'in postinst, not just the ones provided by the '
+                           'package')
+    parser.add_option('-V', type='version_range', dest='vrange',
+                      #help='specify list of supported PyPy versions. ' +
+                      #     'See pypycompile(1) for examples',
+                      help=SUPPRESS_HELP)
+    parser.add_option('-X', '--exclude', action='append', dest='regexpr',
+                      help='exclude items that match given REGEXPR. You may '
+                           'use this option multiple times to build up a list'
+                           ' of things to exclude.')
+    parser.add_option('--depends', action='append',
+                      help='translate given requirements into Debian '
+                           'dependencies and add them to ${pypy:Depends}. '
+                           'Use it for missing items in requires.txt.')
+    parser.add_option('--recommends', action='append',
+                      help='translate given requirements into Debian '
+                           'dependencies and add them to ${pypy:Recommends}')
+    parser.add_option('--suggests', action='append',
+                      help='translate given requirements into Debian '
+                           'dependencies and add them to ${pypy:Suggests}')
+    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('--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)
+
+    options, args = parser.parse_args(sys.argv[1:] +
+                                      os.environ.get('DH_OPTIONS', '').split())
+    # regexpr option type is not used so lets check patterns here
+    for pattern in options.regexpr or []:
+        # fail now rather than at runtime
+        try:
+            pattern = re.compile(pattern)
+        except Exception:
+            log.error('regular expression is not valid: %s', pattern)
+            exit(1)
+
+    if not args:
+        private_dir = None
+    else:
+        private_dir = args[0]
+        if not private_dir.startswith('/'):
+            # handle usr/share/foo dirs (without leading slash)
+            private_dir = '/' + private_dir
+    # TODO: support more than one private dir at the same time (see :meth:scan)
+    if options.skip_private:
+        private_dir = False
+
+    if options.verbose or os.environ.get('DH_VERBOSE') == '1':
+        log.setLevel(logging.DEBUG)
+        log.debug('argv: %s', sys.argv)
+        log.debug('options: %s', options)
+        log.debug('args: %s', args)
+        log.debug('supported PyPy versions: %s (default=%s)',
+                  ','.join(str(v) for v in SUPPORTED), DEFAULT)
+    else:
+        log.setLevel(logging.INFO)
+
+    try:
+        dh = DebHelper(options, impl='pypy')
+    except Exception as e:
+        log.error('cannot initialize DebHelper: %s', e)
+        exit(2)
+    if not options.vrange and dh.python_version:
+        options.vrange = VersionRange(dh.python_version)
+
+    interpreter = Interpreter('pypy')
+    for package, pdetails in dh.packages.items():
+        if options.arch is False and pdetails['arch'] != 'all' or \
+                options.arch is True and pdetails['arch'] == 'all':
+            continue
+        log.debug('processing package %s...', package)
+        if package.endswith('-dbg'):
+            interpreter.debug = True
+
+        if not private_dir:
+            fix_locations(package, interpreter, SUPPORTED)
+        stats = Scanner(interpreter, package, private_dir, options).result
+
+        dependencies = Dependencies(package, 'pypy')
+        dependencies.parse(stats, options)
+
+        if stats['ext_vers']:
+            dh.addsubstvar(package, 'pypy:Versions',
+                           ', '.join(str(v) for v in sorted(stats['ext_vers'])))
+            ps = package.split('-', 1)
+            if len(ps) > 1 and ps[0] == 'pypy':
+                dh.addsubstvar(package, 'pypy:Provides',
+                               ', '.join("pypy%s-%s" % (i, ps[1])
+                               for i in sorted(stats['ext_vers'])))
+
+        pypyclean_added = False  # invoke pypyclean only once in maintainer script
+        if stats['compile']:
+            args = ''
+            if options.vrange:
+                args += "-V %s" % options.vrange
+            dh.autoscript(package, 'postinst', 'postinst-pypycompile', args)
+            dh.autoscript(package, 'prerm', 'prerm-pypyclean', '')
+            pypyclean_added = True
+        for pdir, details in stats['private_dirs'].items():
+            if not details.get('compile'):
+                continue
+            if not pypyclean_added:
+                dh.autoscript(package, 'prerm', 'prerm-pypyclean', '')
+                pypyclean_added = True
+
+            args = pdir
+
+            ext_for = details.get('ext_vers')
+            ext_no_version = details.get('ext_no_version')
+            if ext_for is None and not ext_no_version:  # no extension
+                shebang_versions = list(i.version for i in details.get('shebangs', [])
+                                        if i.version and i.version.minor)
+                if not options.ignore_shebangs and len(shebang_versions) == 1:
+                    # only one version from shebang
+                    args += " -V %s" % shebang_versions[0]
+                elif options.vrange and options.vrange != (None, None):
+                    args += " -V %s" % options.vrange
+            elif ext_no_version:
+                # at least one extension's version not detected
+                if options.vrange and '-' not in str(options.vrange):
+                    ver = str(options.vrange)
+                else:  # try shebang or default PyPy version
+                    ver = (list(i.version for i in details.get('shebangs', [])
+                                if i.version) or [None])[0] or DEFAULT
+                dependencies.depend("pypy%s" % ver)
+                args += " -V %s" % ver
+            else:
+                extensions = sorted(ext_for)
+                vr = VersionRange(minver=extensions[0], maxver=extensions[-1])
+                args += " -V %s" % vr
+
+            for pattern in options.regexpr or []:
+                args += " -X '%s'" % pattern.replace("'", r"'\''")
+
+            dh.autoscript(package, 'postinst', 'postinst-pypycompile', args)
+
+        dependencies.export_to(dh)
+
+        pydist_file = join('debian', "%s.pydist" % package)
+        if exists(pydist_file):
+            if not validate_pydist(pydist_file):
+                log.warning("%s.pydist file is invalid", package)
+            else:
+                dstdir = join('debian', package, 'usr/share/pypy/dist/')
+                if not exists(dstdir):
+                    os.makedirs(dstdir)
+                fcopy(pydist_file, join(dstdir, package))
+
+    dh.save()
+
+if __name__ == '__main__':
+    main()
diff --git a/dh_pypy.rst b/dh_pypy.rst
new file mode 100644
index 0000000..bc665cb
--- /dev/null
+++ b/dh_pypy.rst
@@ -0,0 +1,119 @@
+=========
+ dh_pypy
+=========
+
+---------------------------------------------------------------------------------
+calculates PyPy dependencies, adds maintainer scripts to byte compile files, etc.
+---------------------------------------------------------------------------------
+
+:Manual section: 1
+:Author: Piotr Ożarowski, 2013
+
+SYNOPSIS
+========
+  dh_pypy -p PACKAGE [-V [X.Y][-][A.B]] DIR [-X REGEXPR]
+
+DESCRIPTION
+===========
+
+QUICK GUIDE FOR MAINTAINERS
+---------------------------
+
+ * build-depend on pypy and dh-python,
+ * add `${pypy:Depends}` to Depends
+ * build module/application using its standard build system,
+ * install files to the standard locations,
+ * add `pypy` to dh's --with option, or:
+ * call ``dh_pypy`` in the `binary-*` target,
+
+NOTES
+-----
+
+dependencies
+~~~~~~~~~~~~
+dh_pypy tries to translate Python dependencies from requires.txt file to
+Debian dependencies. Use debian/pypydist-overrides or --no-guessing-deps option
+to override it if the guess is incorrect. If you want dh_pypy to generate
+more strict dependencies (f.e. to avoid ABI problems) create
+debian/pypy-foo.pydist file. See /usr/share/doc/dh-python/README.PyDist
+for more information. If the pydist file contains PEP386 flag or set of (uscan
+like) rules, dh_pypy will make the depedency versioned (version requirements
+are ignored by default).
+
+private dirs
+~~~~~~~~~~~~
+`/usr/share/foo`, `/usr/share/games/foo`, `/usr/lib/foo` and
+`/usr/lib/games/foo` private directories are scanned for Python files by
+default (where `foo` is binary package name). If your package is shipping
+Python files in some other directory, add another dh_pypy call in debian/rules
+with directory name as an argument - you can use different set of options in
+this call. If you need to change options for a private directory that is
+checked by default, invoke dh_pypy 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/pypy/dist-packages/` directory that have extensions different than
+`so` or `h` are removed by default. Use --no-dbg-cleaning option to disable
+this feature.
+
+overriding supported / default PyPy versions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you want to override system's list of supported PyPy versions or the
+default one (f.e. to build a package that includes symlinks for older version
+of PyPy or compile .py files only for given interpreter version), you can do
+that via `DEBPYPY_SUPPORTED` and/or `DEBPYPY_DEFAULT` env. variables.
+
+
+OPTIONS
+=======
+--version	show program's version number and exit
+
+-h, --help	show help message and exit
+
+--no-guessing-deps	disable guessing dependencies
+
+--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
+
+-i, --indep	act on architecture independent packages
+
+-a, --arch	act on architecture dependent packages
+
+-q, --quiet	be quiet
+
+-p PACKAGE, --package=PACKAGE	act on the package named PACKAGE
+
+-N NO_PACKAGE, --no-package=NO_PACKAGE	do not act on the specified package
+
+-X REGEXPR, --exclude=REGEXPR	exclude items that match given REGEXPR. You may
+  use this option multiple times to build up a list of things to exclude.
+
+--compile-all	compile all files from given private directory in postinst/rtupdate
+  not just the ones provided by the package (i.e. do not pass the --package
+  parameter to py3compile/py3clean)
+
+--depends=DEPENDS	translate given requirements into Debian dependencies
+  and add them to ${pypy:Depends}. Use it for missing items in requires.txt
+
+--recommends=RECOMMENDS		translate given requirements into Debian dependencies
+  and add them to ${pypy:Recommends}
+
+--suggests=SUGGESTS	translate given requirements into Debian dependencies
+  and add them to ${pypy:Suggests}
+
+--shebang=COMMAND	use given command as shebang in scripts
+
+--ignore-shebangs	do not translate shebangs into Debian dependencies
+
+SEE ALSO
+========
+* /usr/share/doc/dh-python/README.PyDist
+* pybuild(1)
+* http://deb.li/dhpy - most recent version of this document
diff --git a/tests/Makefile b/tests/Makefile
index b522d8c..1159f22 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -8,7 +8,7 @@ export DEBPYTHON3_DEFAULT=3.3
 export DEBPYTHON3_SUPPORTED=3.2,3.3
 
 # enable or disable tests here:
-TESTS := test201 test202 test203 test204 test205 test206 test207 test301 test302 test303 test304
+TESTS := test101 test201 test202 test203 test204 test205 test206 test207 test301 test302 test303 test304
 
 all: $(TESTS)
 
diff --git a/tests/common.mk b/tests/common.mk
index 24c4ba2..6467f76 100644
--- a/tests/common.mk
+++ b/tests/common.mk
@@ -4,6 +4,8 @@ export DEBPYTHON_DEFAULT ?= $(shell python3 ../../dhpython/_defaults.py default
 export DEBPYTHON_SUPPORTED ?= $(shell python3 ../../dhpython/_defaults.py supported cpython2)
 export DEBPYTHON3_DEFAULT ?= $(shell python3 ../../dhpython/_defaults.py default cpython3)
 export DEBPYTHON3_SUPPORTED ?= $(shell python3 ../../dhpython/_defaults.py supported cpython3)
+export DEBPYPY_DEFAULT ?= $(shell python3 ../../dhpython/_defaults.py default pypy)
+export DEBPYPY_SUPPORTED ?= $(shell python3 ../../dhpython/_defaults.py supported pypy)
 
 all: run check
 
diff --git a/tests/t101/Makefile b/tests/t101/Makefile
new file mode 100644
index 0000000..bc1a487
--- /dev/null
+++ b/tests/t101/Makefile
@@ -0,0 +1,17 @@
+#!/usr/bin/make -f
+include ../common.mk
+
+all: run check
+
+run: clean
+	dpkg-buildpackage -b -us -uc
+
+check:
+	test -f debian/pypy-foo/usr/lib/pypy/dist-packages/foo.py
+	test ! -d debian/pypy-foo/usr/lib/pypy/site-packages
+	test ! -d debian/pypy-foo/usr/lib/pypy/dist-packages/__pycache__
+	grep -q pypycompile debian/pypy-foo/DEBIAN/postinst
+	grep -q pypyclean debian/pypy-foo/DEBIAN/prerm
+
+clean:
+	./debian/rules clean
diff --git a/tests/t101/debian/changelog b/tests/t101/debian/changelog
new file mode 100644
index 0000000..322011c
--- /dev/null
+++ b/tests/t101/debian/changelog
@@ -0,0 +1,5 @@
+foo (1.2.3) unstable; urgency=low
+
+  * Initial release
+
+ -- Piotr Ozarowski <piotr at debian.org>  Tue, 02 Jul 2013 11:02:06 +0200
diff --git a/tests/t101/debian/compat b/tests/t101/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/tests/t101/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/tests/t101/debian/control b/tests/t101/debian/control
new file mode 100644
index 0000000..4be022f
--- /dev/null
+++ b/tests/t101/debian/control
@@ -0,0 +1,13 @@
+Source: foo
+Section: python
+Priority: optional
+Maintainer: Piotr Ożarowski <piotr at debian.org>
+Build-Depends: debhelper (>= 7.0.50~)
+# , dh-python
+Standards-Version: 3.9.4
+
+Package: pypy-foo
+Architecture: all
+Depends: ${pypy3:Depends}, ${shlibs:Depends}, ${misc:Depends}
+Description: package with public PyPy modules
+ exemple package #1
diff --git a/tests/t101/debian/copyright b/tests/t101/debian/copyright
new file mode 100644
index 0000000..f96adde
--- /dev/null
+++ b/tests/t101/debian/copyright
@@ -0,0 +1,2 @@
+The Debian packaging is © 2013, Piotr Ożarowski <piotr at debian.org> and
+is licensed under the MIT License.
diff --git a/tests/t101/debian/rules b/tests/t101/debian/rules
new file mode 100755
index 0000000..e15a94c
--- /dev/null
+++ b/tests/t101/debian/rules
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+
+%:
+	dh $@
+
+override_dh_install:
+	dh_install
+	DH_VERBOSE=1 ../../dh_pypy
+
+override_dh_auto_build:
+override_dh_auto_test:
+
+override_dh_auto_install:
+	mkdir -p debian/pypy-foo/usr/lib/pypy/site-packages/__pycache__
+	echo "print('foo')" > debian/pypy-foo/usr/lib/pypy/site-packages/foo.py
+	touch debian/pypy-foo/usr/lib/pypy/site-packages/__pycache__/foo.pypy-20.pyc
+
+override_dh_auto_clean:
diff --git a/tests/t101/debian/source/format b/tests/t101/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/tests/t101/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dh-python.git



More information about the Reproducible-builds mailing list