commit python-djvulibre for openSUSE:Factory
Hello community, here is the log from the commit of package python-djvulibre for openSUSE:Factory checked in at 2014-11-26 10:33:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-djvulibre (Old) and /work/SRC/openSUSE:Factory/.python-djvulibre.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-djvulibre" Changes: -------- --- /work/SRC/openSUSE:Factory/python-djvulibre/python-djvulibre.changes 2013-10-25 11:14:26.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-djvulibre.new/python-djvulibre.changes 2014-11-26 10:33:10.000000000 +0100 @@ -1,0 +2,26 @@ +Sun Nov 16 15:59:43 UTC 2014 - lazy.kent@opensuse.org + +- Add runtime dependency: djvulibre. + +------------------------------------------------------------------- +Thu Nov 13 13:47:47 UTC 2014 - lazy.kent@opensuse.org + +- Update to 0.3.10. + * Improve error handling in examples. + * Improve the test suite: + + When running external programs, don't reset environment + completely, but only set LC_ALL=C. + + Skip more tests (instead of making them fail) when they are + run in an unsuitable environment. + + Correctly detect ASCII locale encoding on FreeBSD (and + possibly other non-GNU systems). + + Don't hard-code libc error messages. + + Fix test_bad_io failures with Cython ≥ 0.21. + * Improve setup.py: + + Make it possible to build the package natively on Windows. + * Use HTTPS URLs when they are available, in documentation and + code. +- Run tests. BuildRequires: djvulibre, python-nose. +- Add the source GPG signature and a keyring. + +------------------------------------------------------------------- Old: ---- python-djvulibre-0.3.9.tar.gz New: ---- python-djvulibre-0.3.10.tar.gz python-djvulibre-0.3.10.tar.gz.asc python-djvulibre.keyring ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-djvulibre.spec ++++++ --- /var/tmp/diff_new_pack.v4thA7/_old 2014-11-26 10:33:11.000000000 +0100 +++ /var/tmp/diff_new_pack.v4thA7/_new 2014-11-26 10:33:11.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-djvulibre # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,24 +17,28 @@ Name: python-djvulibre -Version: 0.3.9 +Version: 0.3.10 Release: 0 Summary: Python Support for the DjVu Image Format License: GPL-2.0 Group: Development/Libraries/Python Url: http://jwilk.net/software/python-djvulibre -Source0: http://pypi.python.org/packages/source/p/%{name}/%{name}-%{version}.tar.gz +Source0: http://pypi.python.org/packages/source/p/python-djvulibre/%{name}-%{version}.tar.gz +Source1: http://pypi.python.org/packages/source/p/python-djvulibre/%{name}-%{version}.tar.gz.asc +Source2: %{name}.keyring BuildRequires: graphviz BuildRequires: graphviz-gnome BuildRequires: pkg-config BuildRequires: python-Cython +BuildRequires: python-Sphinx BuildRequires: python-devel BuildRequires: python-setuptools -# Starting openSUSE 12.1 the package name is python-Sphinx. -BuildRequires: python-sphinx BuildRequires: pkgconfig(ddjvuapi) +# Required for tests. +BuildRequires: djvulibre +BuildRequires: python-nose +Requires: djvulibre BuildRoot: %{_tmppath}/%{name}-%{version}-build -%py_requires %description python-djvulibre is a set of Python bindings for the DjVuLibre library, @@ -63,23 +67,28 @@ %install python setup.py install \ --root=%{buildroot} \ - --prefix=%{_prefix} \ - --record-rpm=INSTALLED_FILES -install -dm 0755 %{buildroot}%{_defaultdocdir}/%{name}-doc/_images -install -dm 0755 %{buildroot}%{_defaultdocdir}/%{name}-doc/_static + --prefix=%{_prefix} +install -dm 0755 %{buildroot}%{_defaultdocdir}/%{name}-doc/_images/ +install -dm 0755 %{buildroot}%{_defaultdocdir}/%{name}-doc/_static/ install -m 0644 build/sphinx/html/{*.html,*.js} \ - %{buildroot}%{_defaultdocdir}/%{name}-doc + %{buildroot}%{_defaultdocdir}/%{name}-doc/ install -m 0644 build/sphinx/html/_images/* \ - %{buildroot}%{_defaultdocdir}/%{name}-doc/_images + %{buildroot}%{_defaultdocdir}/%{name}-doc/_images/ install -m 0644 build/sphinx/html/_static/* \ - %{buildroot}%{_defaultdocdir}/%{name}-doc/_static + %{buildroot}%{_defaultdocdir}/%{name}-doc/_static/ -%files -f INSTALLED_FILES +%check +cd tests/ +ln -sf %{buildroot}%{python_sitearch}/djvu/ djvu +python -m nose --verbose --no-skip + +%files %defattr(-,root,root,-) -%doc COPYING doc/changelog examples +%doc COPYING doc/changelog examples/ +%{python_sitearch}/* %files doc %defattr(-,root,root,-) -%doc %{_defaultdocdir}/%{name}-doc +%doc %{_defaultdocdir}/%{name}-doc/ %changelog ++++++ python-djvulibre-0.3.9.tar.gz -> python-djvulibre-0.3.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/COPYING new/python-djvulibre-0.3.10/COPYING --- old/python-djvulibre-0.3.9/COPYING 2009-06-04 16:55:28.000000000 +0200 +++ new/python-djvulibre-0.3.10/COPYING 2012-08-07 12:29:43.000000000 +0200 @@ -1,12 +1,12 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -56,7 +56,7 @@ The precise terms and conditions for copying, distribution and modification follow. - GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -255,7 +255,7 @@ of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -277,9 +277,9 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS - How to Apply These Terms to Your New Programs + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/PKG-INFO new/python-djvulibre-0.3.10/PKG-INFO --- old/python-djvulibre-0.3.9/PKG-INFO 2012-03-19 21:02:31.000000000 +0100 +++ new/python-djvulibre-0.3.10/PKG-INFO 2014-11-04 11:48:02.000000000 +0100 @@ -1,14 +1,14 @@ Metadata-Version: 1.1 Name: python-djvulibre -Version: 0.3.9 +Version: 0.3.10 Summary: Python support for the DjVu image format Home-page: http://jwilk.net/software/python-djvulibre Author: Jakub Wilk Author-email: jwilk@jwilk.net License: GNU GPL 2 -Description: *python-djvulibre* is a set of `Python <http://python.org>`_ bindings for the - `DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation of - `DjVu <http://djvu.org/>`_. +Description: *python-djvulibre* is a set of `Python <https://www.python.org>`_ bindings for + the `DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation + of `DjVu <http://djvu.org/>`_. Platform: all Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/djvu/decode.pyx new/python-djvulibre-0.3.10/djvu/decode.pyx --- old/python-djvulibre-0.3.9/djvu/decode.pyx 2012-03-18 23:18:33.000000000 +0100 +++ new/python-djvulibre-0.3.10/djvu/decode.pyx 2014-11-02 17:39:42.000000000 +0100 @@ -1,4 +1,4 @@ -# Copyright © 2007-2012 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2007-2014 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -57,7 +57,7 @@ from traceback import format_exc # The two lines below are solely to work-around Cython bug: -# http://bugs.debian.org/620859 +# https://bugs.debian.org/620859 cdef object MemoryError IF PY3K: from builtins import MemoryError @@ -298,7 +298,7 @@ Exception.__init__( self, 'A DjVuLibre bug has been encountered.\n' - 'See <http://bugs.debian.org/%d> for details.\n' + 'See <https://bugs.debian.org/%d> for details.\n' 'Please upgrade your DjVuLibre.' % (debian_bug_no,) ) @@ -1095,7 +1095,7 @@ .. warning:: Due to a DjVuLibre (<= 3.5.20) bug, this method may be broken. - See http://bugs.debian.org/467282 for details. + See https://bugs.debian.org/467282 for details. ''' cdef char * optv[2] cdef int optc @@ -1251,7 +1251,7 @@ **Warning*** ------------ Due to a DjVuLibre (<= 3.5.20) bug, this method may be broken. - See http://bugs.debian.org/469122 for details. + See https://bugs.debian.org/469122 for details. ''' cdef FILE* output cdef SaveJob job diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/djvu/sexpr.pyx new/python-djvulibre-0.3.10/djvu/sexpr.pyx --- old/python-djvulibre-0.3.9/djvu/sexpr.pyx 2012-03-19 14:30:42.000000000 +0100 +++ new/python-djvulibre-0.3.10/djvu/sexpr.pyx 2014-11-02 17:39:47.000000000 +0100 @@ -1,4 +1,4 @@ -# Copyright © 2007-2012 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2007-2014 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -798,7 +798,7 @@ # Normally one would use # self[len(self):] = … # but Cython (at least 0.13) generates broken code for such a statement. - # http://bugs.debian.org/604963 + # https://bugs.debian.org/604963 iter(iterable) self[slice(len(self), None, None)] = iterable @@ -806,7 +806,7 @@ # Normally one would use # self[len(self):] = … # but Cython (at least 0.13) generates broken code for such a statement. - # http://bugs.debian.org/604963 + # https://bugs.debian.org/604963 iter(iterable) self[slice(len(self), None, None)] = iterable return self diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/doc/changelog new/python-djvulibre-0.3.10/doc/changelog --- old/python-djvulibre-0.3.9/doc/changelog 2012-03-19 20:41:55.000000000 +0100 +++ new/python-djvulibre-0.3.10/doc/changelog 2014-11-04 11:44:13.000000000 +0100 @@ -1,14 +1,33 @@ +python-djvulibre (0.3.10) unstable; urgency=low + + * Improve error handling in examples. + * Improve the test suite: + + When running external programs, don't reset environment completely, but + only set LC_ALL=C. + + Skip more tests (instead of making them fail) when they are run in + an unsuitable environment. + + Correctly detect ASCII locale encoding on FreeBSD (and possibly other + non-GNU systems). + + Don't hard-code libc error messages. + + Fix test_bad_io failures with Cython ≥ 0.21. + * Improve setup.py: + + Make it possible to build the package natively on Windows. + https://bitbucket.org/jwilk/python-djvulibre/issue/1 + * Use HTTPS URLs when they are available, in documentation and code. + + -- Jakub Wilk <jwilk@jwilk.net> Tue, 04 Nov 2014 11:44:09 +0100 + python-djvulibre (0.3.9) unstable; urgency=low * Ensure that all S-expression output is 7-bit. - This is work-around for <http://bugs.debian.org/664626>. + This is work-around for <https://bugs.debian.org/664626>. -- Jakub Wilk <jwilk@jwilk.net> Mon, 19 Mar 2012 20:41:53 +0100 python-djvulibre (0.3.8) unstable; urgency=low * Ensure that S-expression input/output functions are always initialized. - This is work-around for <http://bugs.debian.org/664442>. + This is work-around for <https://bugs.debian.org/664442>. -- Jakub Wilk <jwilk@jwilk.net> Sun, 18 Mar 2012 23:44:55 +0100 @@ -49,10 +68,10 @@ * Optimize DocumentPages.__len__() and DocumentFiles.__len__(). * Fix compatibility with Python 3.X (broken in 0.3.3). * Update various external documentation URLs. - http://bugs.debian.org/627290 + https://bugs.debian.org/627290 * Improve test suite: + Normalize whitespace in ps2ascii output. - http://bugs.debian.org/646177 + https://bugs.debian.org/646177 * Improve setup.py: + Print a more meaningful error message if pkg-config fails. + build_sphinx is now available even without setuptools. @@ -67,7 +86,7 @@ * Add Windows-specific module djvu.dllpath, which is aimed to ease finding DjVuLibre DLLs in non-standard locations. * Make expression and symbol objects picklable. - * Add work-around for <http://bugs.debian.org/620859>. + * Add work-around for <https://bugs.debian.org/620859>. * Fix test suite compatibility with Python 3. -- Jakub Wilk <jwilk@jwilk.net> Mon, 04 Apr 2011 21:06:01 +0200 @@ -81,9 +100,9 @@ * Add ‘+=’ and ‘del’ operators for list expressions. * Fix compatibility with Cython 0.12. * Fix compatibility with some non-POSIX operating systems. - * Add work-around for <http://bugs.python.org/issue969718>. + * Add work-around for <https://bugs.python.org/issue969718>. * Improve setup.py: - + Add work-around for <http://bugs.debian.org/607112>. + + Add work-around for <https://bugs.debian.org/607112>. + Make ‘clean --all’ remove temporary *.pxi and *.c files. + Don't import Cython modules; calls the ‘cython’ binary instead. + Allow cross-compilation using MinGW cross compiler. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/doc/source/conf.py new/python-djvulibre-0.3.10/doc/source/conf.py --- old/python-djvulibre-0.3.9/doc/source/conf.py 2012-03-18 23:28:16.000000000 +0100 +++ new/python-djvulibre-0.3.10/doc/source/conf.py 2014-05-12 12:37:54.000000000 +0200 @@ -38,7 +38,7 @@ html_use_modindex = True html_use_index = False -intersphinx_mapping = {'http://docs.python.org/': None} +intersphinx_mapping = {'https://docs.python.org/': None} rst_epilog = ''' .. |djvu3ref| replace:: Lizardtech DjVu Reference diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/doc/source/documents.txt new/python-djvulibre-0.3.10/doc/source/documents.txt --- old/python-djvulibre-0.3.9/doc/source/documents.txt 2010-09-05 18:39:53.000000000 +0200 +++ new/python-djvulibre-0.3.10/doc/source/documents.txt 2014-05-12 12:36:27.000000000 +0200 @@ -88,7 +88,7 @@ .. warning:: Due to a DjVuLibre (≤ 3.5.20) bug, this method may be broken. - See http://bugs.debian.org/467282 for details. + See https://bugs.debian.org/467282 for details. .. method:: export_ps(file[, …][, wait=True]) @@ -211,7 +211,7 @@ .. warning:: Due to a DjVuLibre (≤ 3.5.20) bug, this method may be broken. - See http://bugs.debian.org/469122 for details. + See https://bugs.debian.org/469122 for details. .. currentmodule:: djvu.decode .. class:: SaveJob diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/examples/djvu-crop-text new/python-djvulibre-0.3.10/examples/djvu-crop-text --- old/python-djvulibre-0.3.9/examples/djvu-crop-text 2012-03-18 23:22:19.000000000 +0100 +++ new/python-djvulibre-0.3.10/examples/djvu-crop-text 2013-11-23 17:23:42.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/python # encoding=UTF-8 -# Copyright © 2008-2010 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2008-2013 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,8 +13,9 @@ # General Public License for more details. import argparse -import sys +import os import subprocess +import sys import djvu.sexpr import djvu.decode @@ -68,7 +69,9 @@ def handle_message(self, message): if isinstance(message, djvu.decode.ErrorMessage): print >>sys.stderr, message - sys.exit(1) + # Exceptions in handle_message() are ignored, so sys.exit() + # wouldn't work here. + os._exit(1) def process_page(self, page): print >>sys.stderr, '- Page #%d' % (page.n + 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/examples/djvu-dump-text new/python-djvulibre-0.3.10/examples/djvu-dump-text --- old/python-djvulibre-0.3.9/examples/djvu-dump-text 2012-03-18 23:22:59.000000000 +0100 +++ new/python-djvulibre-0.3.10/examples/djvu-dump-text 2013-11-23 17:23:42.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/python # encoding=UTF-8 -# Copyright © 2008-2010 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2008-2013 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,12 +13,16 @@ # General Public License for more details. import sys +import os + import djvu.decode def print_text(sexpr, level=0): if level > 0: print ' ' * (2 * level - 1), if isinstance(sexpr, djvu.sexpr.ListExpression): + if len(sexpr) == 0: + return print str(sexpr[0].value), [sexpr[i].value for i in xrange(1, 5)] for child in sexpr[5:]: print_text(child, level + 1) @@ -30,7 +34,9 @@ def handle_message(self, message): if isinstance(message, djvu.decode.ErrorMessage): print >>sys.stderr, message - sys.exit(1) + # Exceptions in handle_message() are ignored, so sys.exit() + # wouldn't work here. + os._exit(1) def process(self, path): document = self.new_document(djvu.decode.FileURI(path)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/examples/djvu2png new/python-djvulibre-0.3.10/examples/djvu2png --- old/python-djvulibre-0.3.9/examples/djvu2png 2012-03-18 23:25:09.000000000 +0100 +++ new/python-djvulibre-0.3.10/examples/djvu2png 2013-11-23 17:23:42.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/python # encoding=UTF-8 -# Copyright © 2010 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2010-2013 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,6 +13,7 @@ # General Public License for more details. import argparse +import os import sys import cairo @@ -29,7 +30,9 @@ def handle_message(self, message): if isinstance(message, djvu.decode.ErrorMessage): print >>sys.stderr, message - sys.exit(1) + # Exceptions in handle_message() are ignored, so sys.exit() + # wouldn't work here. + os._exit(1) def process(self, djvu_path, png_path, mode): document = self.new_document(djvu.decode.FileURI(djvu_path)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/python_djvulibre.egg-info/PKG-INFO new/python-djvulibre-0.3.10/python_djvulibre.egg-info/PKG-INFO --- old/python-djvulibre-0.3.9/python_djvulibre.egg-info/PKG-INFO 2012-03-19 21:02:31.000000000 +0100 +++ new/python-djvulibre-0.3.10/python_djvulibre.egg-info/PKG-INFO 2014-11-04 11:48:02.000000000 +0100 @@ -1,14 +1,14 @@ Metadata-Version: 1.1 Name: python-djvulibre -Version: 0.3.9 +Version: 0.3.10 Summary: Python support for the DjVu image format Home-page: http://jwilk.net/software/python-djvulibre Author: Jakub Wilk Author-email: jwilk@jwilk.net License: GNU GPL 2 -Description: *python-djvulibre* is a set of `Python <http://python.org>`_ bindings for the - `DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation of - `DjVu <http://djvu.org/>`_. +Description: *python-djvulibre* is a set of `Python <https://www.python.org>`_ bindings for + the `DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation + of `DjVu <http://djvu.org/>`_. Platform: all Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/setup.py new/python-djvulibre-0.3.10/setup.py --- old/python-djvulibre-0.3.9/setup.py 2012-03-18 23:27:27.000000000 +0100 +++ new/python-djvulibre-0.3.10/setup.py 2014-11-04 11:10:05.000000000 +0100 @@ -1,6 +1,6 @@ # encoding=UTF-8 -# Copyright © 2007-2011 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2007-2014 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -12,9 +12,9 @@ # General Public License for more details. ''' -*python-djvulibre* is a set of `Python <http://python.org>`_ bindings for the -`DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation of -`DjVu <http://djvu.org/>`_. +*python-djvulibre* is a set of `Python <https://www.python.org>`_ bindings for +the `DjVuLibre <http://djvu.sf.net/>`_ library, an open source implementation +of `DjVu <http://djvu.org/>`_. ''' classifiers = ''' @@ -30,10 +30,11 @@ Topic :: Multimedia :: Graphics Topic :: Multimedia :: Graphics :: Graphics Conversion Topic :: Text Processing -'''.strip().split('\n') +'''.strip().splitlines() import glob import os +import re import sys import subprocess as ipc @@ -42,6 +43,9 @@ else: mingw32cross = None +if os.name == 'nt': + import djvu.dllpath + # Just to make sure setuptools won't try to be clever: fake_module = type(sys)('fake_module') fake_module.build_ext = None @@ -66,7 +70,7 @@ sphinx_setup_command = None def ext_modules(): - for pyx_file in glob.glob(os.path.join('djvu', '*.pyx')): + for pyx_file in glob.iglob(os.path.join('djvu', '*.pyx')): module, _ = os.path.splitext(os.path.basename(pyx_file)) yield module ext_modules = list(ext_modules()) @@ -85,6 +89,16 @@ PKG_CONFIG_FLAG_MAP = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'} def pkg_config(*packages, **kwargs): + fallback = dict( + libraries=['djvulibre'], + ) + if os.name == 'nt': + dll_path = djvu.dllpath.guess_dll_path() + if dll_path is not None: + fallback.update( + extra_compile_args=['-I' + os.path.join(dll_path, 'include')], + extra_link_args=['-L' + os.path.join(dll_path)], + ) try: pkgconfig = ipc.Popen( ['pkg-config', '--libs', '--cflags'] + list(packages), @@ -92,13 +106,14 @@ ) except OSError: _, ex, _ = sys.exc_info() - ex.strerror = 'pkg-config: ' + ex.strerror - raise + distutils.log.warn('cannot execute pkg-config: ' + str(ex)) + return fallback stdout, stderr = pkgconfig.communicate() stdout = stdout.decode('ASCII', 'replace') stderr = stderr.decode('ASCII', 'replace') if pkgconfig.returncode: - raise IOError('[pkg-config] ' + stderr.strip()) + distutils.log.warn('pkg-config failed: ' + stderr.strip()) + return fallback kwargs.setdefault('extra_link_args', []) kwargs.setdefault('extra_compile_args', ['-Wno-uninitialized']) for argument in stdout.split(): @@ -111,17 +126,9 @@ kwargs['extra_compile_args'].append(argument) return kwargs -if mingw32cross: - - def pkg_config(*packages, **kwargs): - return dict( - libraries=['libdjvulibre'], - ) - return kwargs - __version__ = get_version() -# Work-around for <http://bugs.python.org/issue969718>: +# Work-around for <https://bugs.python.org/issue969718>: try: del os.environ['CFLAGS'] except KeyError: @@ -164,25 +171,33 @@ distutils.log.info('cythoning %r extension', ext.name) def build_c(source, target): distutils.spawn.spawn(['cython', source]) - # XXX This is needed to work around <http://bugs.debian.org/607112>. + # XXX This is needed to work around <https://bugs.debian.org/607112>. # Fortunately, python-djvulibre doesn't really need __Pyx_GetVtable(). - distutils.spawn.spawn(['sed', '-i~', '-e', - r's/\(static int __Pyx_GetVtable(PyObject [*]dict, void [*]vtabptr) {\)/\1 return 0;/', - target - ]) + file = open(target, 'r+') + try: + contents = file.read() + contents = re.compile( + r'(?<=^static int __Pyx_GetVtable\(PyObject [*]dict, void [*]vtabptr\) {)$', + re.MULTILINE + ).sub(' return 0;', contents) + file.seek(0) + file.truncate() + file.write(contents) + finally: + file.close() self.make_file(depends, target, build_c, [source, target]) class clean(distutils.command.clean.clean): def run(self): if self.all: - for wildcard in 'djvu/*.c', 'djvu/*.c~', 'djvu/config.pxi': + for wildcard in 'djvu/*.c', 'djvu/config.pxi': filenames = glob.glob(wildcard) if filenames: distutils.log.info('removing %r', wildcard) if self.dry_run: continue - for filename in glob.glob(wildcard): + for filename in filenames: os.remove(filename) return distutils.command.clean.clean.run(self) @@ -198,12 +213,15 @@ # use instead. build_ext = self.get_finalized_command('build_ext') sys.path[:0] = [build_ext.build_lib] - import djvu + for ext in ext_modules: + __import__('djvu.' + ext) del sys.path[0] sphinx_setup_command.BuildDoc.run(self) else: build_sphinx = None +compiler_flags = pkg_config('ddjvuapi') + setup_params = dict( name = 'python-djvulibre', version = __version__, @@ -220,7 +238,7 @@ distutils.command.build_ext.Extension( 'djvu.%s' % name, ['djvu/%s.pyx' % name], depends = ['djvu/common.pxi'] + glob.glob('djvu/*.pxd'), - **pkg_config('ddjvuapi') + **compiler_flags ) for name in ext_modules ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/tests/common.py new/python-djvulibre-0.3.10/tests/common.py --- old/python-djvulibre-0.3.9/tests/common.py 2012-03-19 20:38:40.000000000 +0100 +++ new/python-djvulibre-0.3.10/tests/common.py 2013-06-11 22:44:35.000000000 +0200 @@ -13,6 +13,7 @@ from __future__ import with_statement +import codecs import contextlib import locale import os @@ -41,7 +42,7 @@ locale.LC_MESSAGES = locale.LC_ALL locale_encoding = locale.getpreferredencoding() -if locale_encoding == 'ANSI_X3.4-1968': +if codecs.lookup(locale_encoding) == codecs.lookup('US-ASCII'): locale_encoding = 'UTF-8' py3k = sys.version_info >= (3, 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/tests/test_decode.py new/python-djvulibre-0.3.10/tests/test_decode.py --- old/python-djvulibre-0.3.9/tests/test_decode.py 2012-03-19 15:27:22.000000000 +0100 +++ new/python-djvulibre-0.3.10/tests/test_decode.py 2013-06-13 15:07:11.000000000 +0200 @@ -1,6 +1,6 @@ # encoding=UTF-8 -# Copyright © 2007-2012 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2007-2013 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,6 +14,7 @@ from __future__ import with_statement import array +import errno import os import shutil import subprocess as ipc @@ -68,29 +69,53 @@ Document() def test_nonexistent(self): + path = '__nonexistent__' + try: + os.stat(path) + except OSError: + _, ex, _ = sys.exc_info() + c_message = ex.args[1] + else: + raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), path) + c_message.encode('ASCII') skip_unless_c_messages() context = Context() with raises(JobFailed): - document = context.new_document(FileUri('__nonexistent__')) + document = context.new_document(FileUri(path)) message = context.get_message() assert_equal(type(message), ErrorMessage) assert_equal(type(message.message), unicode) - assert_equal(message.message, "[1-11711] Failed to open '__nonexistent__': No such file or directory.") + assert_equal(message.message, "[1-11711] Failed to open '%s': %s." % (path, c_message)) assert_equal(str(message), message.message) assert_equal(unicode(message), message.message) def test_nonexistent_ja(self): skip_unless_c_messages() skip_unless_translation_exists('ja_JP.UTF-8') + path = '__nonexistent__' context = Context() + try: + with amended_locale(LC_ALL='ja_JP.UTF-8'): + os.stat(path) + except OSError: + _, ex, _ = sys.exc_info() + c_message = ex.args[1] + else: + raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), path) + try: + c_message.encode('ASCII') + except UnicodeError: + pass + else: + raise AssertionError('ja_JP error message is ASCII-only: %r' % c_message) with amended_locale(LC_ALL='ja_JP.UTF-8'): with raises(JobFailed): - document = context.new_document(FileUri('__nonexistent__')) + document = context.new_document(FileUri(path)) message = context.get_message() assert_equal(type(message), ErrorMessage) assert_equal(type(message.message), unicode) - assert_equal(message.message, u("[1-11711] Failed to open '__nonexistent__': そのようなファイルやディレクトリはありません.")) - assert_equal(str(message), "[1-11711] Failed to open '__nonexistent__': そのようなファイルやディレクトリはありません.") + assert_equal(message.message, u("[1-11711] Failed to open '%s': %s." % (path, c_message))) + assert_equal(str(message), "[1-11711] Failed to open '%s': %s." % (path, c_message)) assert_equal(unicode(message), message.message) def test_new_document(self): @@ -194,7 +219,9 @@ assert_equal(len(document.pages), 6) assert_equal(len(document.files), 7) - stdout0, stderr0 = ipc.Popen(['djvudump', original_filename], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + c_env = dict(os.environ, LC_ALL='C') + + stdout0, stderr0 = ipc.Popen(['djvudump', original_filename], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr0, b('')) stdout0 = stdout0.replace(b('\r\n'), b('\n')) @@ -206,7 +233,7 @@ assert_true(job.is_done) assert_false(job.is_error) tmp.close() - stdout, stderr = ipc.Popen(['djvudump', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['djvudump', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr, b('')) stdout = stdout.replace(b('\r\n'), b('\n')) assert_equal(stdout, stdout0) @@ -222,7 +249,7 @@ assert_true(job.is_done) assert_false(job.is_error) tmp.close() - stdout, stderr = ipc.Popen(['djvudump', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['djvudump', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr, b('')) stdout = stdout.replace(b('\r\n'), b('\n')) stdout0 = stdout0.split(b('\n')) @@ -242,7 +269,7 @@ assert_equal(type(job), SaveJob) assert_true(job.is_done) assert_false(job.is_error) - stdout, stderr = ipc.Popen(['djvudump', tmpfname], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['djvudump', tmpfname], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr, b('')) stdout = stdout.replace(b('\r\n'), b('\n')) stdout = stdout.split(b('\n')) @@ -263,7 +290,7 @@ assert_equal(type(job), SaveJob) assert_true(job.is_done) assert_false(job.is_error) - stdout, stderr = ipc.Popen(['djvudump', tmpfname], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['djvudump', tmpfname], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() stdout = stdout.replace(b('\r\n'), b('\n')) assert_equal(stderr, b('')) stdout = stdout.split(b('\n')) @@ -287,13 +314,15 @@ assert_equal(len(document.pages), 6) assert_equal(len(document.files), 7) + c_env = dict(os.environ, LC_ALL='C') + tmp = tempfile.NamedTemporaryFile() try: job = document.export_ps(tmp.file) assert_equal(type(job), SaveJob) assert_true(job.is_done) assert_false(job.is_error) - stdout, stderr = ipc.Popen(['ps2ascii', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['ps2ascii', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr, b('')) assert_equal(stdout, b('\x0c') * 6) finally: @@ -305,7 +334,7 @@ assert_equal(type(job), SaveJob) assert_true(job.is_done) assert_false(job.is_error) - stdout, stderr = ipc.Popen(['ps2ascii', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env={}).communicate() + stdout, stderr = ipc.Popen(['ps2ascii', tmp.name], stdout=ipc.PIPE, stderr=ipc.PIPE, env=c_env).communicate() assert_equal(stderr, b('')) stdout = stdout.split(b('\n')) stdout = [b(' ').join(line.split()) for line in stdout] @@ -555,7 +584,7 @@ try: test_file = create_djvu(test_script) except UnicodeEncodeError: - raise AssertionError('You need to run this test with an UTF-8 locale') + raise SkipTest('you need to run this test with LC_CTYPE=C or LC_CTYPE=<lang>.UTF-8') try: context = Context() document = context.new_document(FileUri(test_file.name)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-djvulibre-0.3.9/tests/test_sexpr.py new/python-djvulibre-0.3.10/tests/test_sexpr.py --- old/python-djvulibre-0.3.9/tests/test_sexpr.py 2012-03-19 20:40:14.000000000 +0100 +++ new/python-djvulibre-0.3.10/tests/test_sexpr.py 2014-11-02 17:40:19.000000000 +0100 @@ -1,6 +1,6 @@ # encoding=UTF-8 -# Copyright © 2007-2012 Jakub Wilk <jwilk@jwilk.net> +# Copyright © 2007-2014 Jakub Wilk <jwilk@jwilk.net> # # This package is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -406,10 +406,14 @@ with raises(ExpressionSyntaxError): Expression.from_stream(42) stderr = strip_line_numbers_from_traceback(stderr.getvalue()) + stderr = stderr.replace( + '"sexpr.pyx"', # Cython < 0.21 + '"djvu/sexpr.pyx"' # Cython ≥ 0.21 + ) assert_multi_line_equal(stderr, '''\ Unhandled exception (42) Traceback (most recent call last): - File "sexpr.pyx", in djvu.sexpr._myio_getc (djvu/sexpr.c) + File "djvu/sexpr.pyx", in djvu.sexpr._myio_getc (djvu/sexpr.c) AttributeError: 'int' object has no attribute 'read' ''') @@ -467,10 +471,14 @@ with interim(sys, stderr=stderr): self.expr.print_into(42) stderr = strip_line_numbers_from_traceback(stderr.getvalue()) + stderr = stderr.replace( + '"sexpr.pyx"', # Cython < 0.21 + '"djvu/sexpr.pyx"' # Cython ≥ 0.21 + ) expected_stderr = '''\ Unhandled exception (42) Traceback (most recent call last): - File "sexpr.pyx", in djvu.sexpr._myio_puts (djvu/sexpr.c) + File "djvu/sexpr.pyx", in djvu.sexpr._myio_puts (djvu/sexpr.c) AttributeError: 'int' object has no attribute 'write' ''' ++++++ python-djvulibre.keyring ++++++ pub 4096R/015475F5 2009-10-23 [expires: 2015-01-01] uid Jakub Wilk <jwilk@jwilk.net> uid Jakub Wilk <jwilk@debian.org> uid Jakub Wilk <ubanus@users.sf.net> sub 4096R/E5874F63 2009-10-23 -----BEGIN PGP PUBLIC KEY BLOCK----- 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 bN5AxyPui0i3KQXs09FW/+n9DTw= =1quD -----END PGP PUBLIC KEY BLOCK----- -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de