From 72978d4809b74646f946dca457e15a4fe44ec34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20=C4=8Cajka?= Date: Mon, 15 Sep 2014 13:27:38 +0200 Subject: [PATCH] Fixed typecast issues using debian patch(int->size_t)(BZ#1140189) --- PyYAML.spec | 35 +++++++++++------- debian-big-endian-fix.patch | 73 +++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 debian-big-endian-fix.patch diff --git a/PyYAML.spec b/PyYAML.spec index fa6b279..2444c37 100644 --- a/PyYAML.spec +++ b/PyYAML.spec @@ -6,21 +6,26 @@ Name: PyYAML Version: 3.11 -Release: 5%{?dist} +Release: 6%{?dist} Summary: YAML parser and emitter for Python Group: Development/Libraries License: MIT URL: http://pyyaml.org/ Source0: http://pyyaml.org/download/pyyaml/%{name}-%{version}.tar.gz -BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRequires: python-devel, python-setuptools, libyaml-devel +BuildRequires: Cython +BuildRequires: libyaml-devel Provides: python-yaml = %{version}-%{release} Provides: python-yaml%{?_isa} = %{version}-%{release} %if 0%{?with_python3} BuildRequires: python3-devel BuildRequires: python3-setuptools +BuildRequires: python3-Cython %endif +# debian patch, upstream ticket http://pyyaml.org/ticket/247 and +# https://bitbucket.org/xi/pyyaml/issue/35/test-fails-on-be-s390-x-ppc64 +Patch0: debian-big-endian-fix.patch %description YAML is a data serialization format designed for human readability and @@ -57,26 +62,30 @@ configuration files to object serialization and persistance. %prep %setup -q -n %{name}-%{version} +%patch0 -p1 -b .be chmod a-x examples/yaml-highlight/yaml_hl.py -%if 0%{?with_python3} -rm -rf %{py3dir} -cp -a . %{py3dir} -%endif +# remove pre-generated file +rm -rf ext/_yaml.c %build -CFLAGS="${RPM_OPT_FLAGS}" %{__python} setup.py --with-libyaml build +# regenerate ext/_yaml.c +CFLAGS="${RPM_OPT_FLAGS}" %{__python} setup.py --with-libyaml build_ext %if 0%{?with_python3} +rm -rf %{py3dir} +# ext/_yaml.c is needed +cp -a . %{py3dir} pushd %{py3dir} CFLAGS="${RPM_OPT_FLAGS}" %{__python3} setup.py --with-libyaml build popd %endif +CFLAGS="${RPM_OPT_FLAGS}" %{__python} setup.py --with-libyaml build + %install -rm -rf %{buildroot} %{__python} setup.py install -O1 --skip-build --root %{buildroot} %if 0%{?with_python3} @@ -96,12 +105,7 @@ popd %endif -%clean -rm -rf %{buildroot} - - %files -%defattr(644,root,root,755) %{!?_licensedir:%global license %%doc} %license LICENSE %doc CHANGES PKG-INFO README examples @@ -109,7 +113,6 @@ rm -rf %{buildroot} %if 0%{?with_python3} %files -n python3-PyYAML -%defattr(644,root,root,755) %{!?_licensedir:%global license %%doc} %license LICENSE %doc CHANGES PKG-INFO README examples @@ -118,6 +121,10 @@ rm -rf %{buildroot} %changelog +* Mon Sep 15 2014 Jakub Čajka - 3.11-6 +- fixed typecast issues using debian patch(int->size_t)(BZ#1140189) +- spec file cleanup + * Fri Aug 15 2014 Fedora Release Engineering - 3.11-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild diff --git a/debian-big-endian-fix.patch b/debian-big-endian-fix.patch new file mode 100644 index 0000000..7991005 --- /dev/null +++ b/debian-big-endian-fix.patch @@ -0,0 +1,73 @@ +pyyaml FTBFS on the s390x buildd. It seems this is due to using int +where the libyaml API uses size_t. I tested the attached patch in +zelenka.d.o's sid chroot, and at least the python2 build/test worked (it +failed with the same error as the buildd pre-patching). +Patch by Julien Cristau +Add to the pyyaml package by Scott Kitterman +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=676536 + +Index: pyyaml-3.10/ext/_yaml.pxd +=================================================================== +--- pyyaml-3.10.orig/ext/_yaml.pxd 2011-05-29 23:31:01.000000000 -0400 ++++ pyyaml-3.10/ext/_yaml.pxd 2012-06-08 16:33:54.309407701 -0400 +@@ -86,15 +86,15 @@ + YAML_MAPPING_END_EVENT + + ctypedef int yaml_read_handler_t(void *data, char *buffer, +- int size, int *size_read) except 0 ++ size_t size, size_t *size_read) except 0 + + ctypedef int yaml_write_handler_t(void *data, char *buffer, +- int size) except 0 ++ size_t size) except 0 + + ctypedef struct yaml_mark_t: +- int index +- int line +- int column ++ size_t index ++ size_t line ++ size_t column + ctypedef struct yaml_version_directive_t: + int major + int minor +@@ -113,7 +113,7 @@ + char *suffix + ctypedef struct _yaml_token_scalar_data_t: + char *value +- int length ++ size_t length + yaml_scalar_style_t style + ctypedef struct _yaml_token_version_directive_data_t: + int major +@@ -152,7 +152,7 @@ + char *anchor + char *tag + char *value +- int length ++ size_t length + int plain_implicit + int quoted_implicit + yaml_scalar_style_t style +Index: pyyaml-3.10/ext/_yaml.pyx +=================================================================== +--- pyyaml-3.10.orig/ext/_yaml.pyx 2011-05-29 23:31:01.000000000 -0400 ++++ pyyaml-3.10/ext/_yaml.pyx 2012-06-08 16:33:54.313409701 -0400 +@@ -905,7 +905,7 @@ + raise error + return 1 + +-cdef int input_handler(void *data, char *buffer, int size, int *read) except 0: ++cdef int input_handler(void *data, char *buffer, size_t size, size_t *read) except 0: + cdef CParser parser + parser = data + if parser.stream_cache is None: +@@ -1515,7 +1515,7 @@ + self.ascend_resolver() + return 1 + +-cdef int output_handler(void *data, char *buffer, int size) except 0: ++cdef int output_handler(void *data, char *buffer, size_t size) except 0: + cdef CEmitter emitter + emitter = data + if emitter.dump_unicode == 0: