Accepting request 566623 from openSUSE:Factory:Staging:O

- Tweak the python conditions to pick between py2 and py3 only
  do not bother with "both at once" scenario
- Apply patches to make sure we really work with python3:
  * U_python-whitespace.patch
  * U_python3-compat.patch

OBS-URL: https://build.opensuse.org/request/show/566623
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xcb-proto?expand=0&rev=25
This commit is contained in:
Stefan Dirsch 2018-01-17 14:10:09 +00:00 committed by Git OBS Bridge
parent 852073b9aa
commit a34804da53
4 changed files with 318 additions and 32 deletions

211
U_python-whitespace.patch Normal file
View File

@ -0,0 +1,211 @@
From ea7a3ac6c658164690e0febb55f4467cb9e0bcac Mon Sep 17 00:00:00 2001
From: Thomas Klausner <wiz@NetBSD.org>
Date: Thu, 19 May 2016 17:30:04 +0200
Subject: Make whitespace use consistent.
At least python-3.5.x complains about this forcefully.
Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
Signed-off-by: Uli Schlachter <psychon@znc.in>
---
xcbgen/align.py | 96 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 48 insertions(+), 48 deletions(-)
diff --git a/xcbgen/align.py b/xcbgen/align.py
index 5e31838..d4c12ee 100644
--- a/xcbgen/align.py
+++ b/xcbgen/align.py
@@ -16,12 +16,12 @@ class Alignment(object):
return self.align == other.align and self.offset == other.offset
def __str__(self):
- return "(align=%d, offset=%d)" % (self.align, self.offset)
+ return "(align=%d, offset=%d)" % (self.align, self.offset)
@staticmethod
def for_primitive_type(size):
- # compute the required start_alignment based on the size of the type
- if size % 8 == 0:
+ # compute the required start_alignment based on the size of the type
+ if size % 8 == 0:
# do 8-byte primitives require 8-byte alignment in X11?
return Alignment(8,0)
elif size % 4 == 0:
@@ -33,7 +33,7 @@ class Alignment(object):
def align_after_fixed_size(self, size):
- new_offset = (self.offset + size) % self.align
+ new_offset = (self.offset + size) % self.align
return Alignment(self.align, new_offset)
@@ -41,7 +41,7 @@ class Alignment(object):
'''
Assuming the given external_align, checks whether
self is fulfilled for all cases.
- Returns True if yes, False otherwise.
+ Returns True if yes, False otherwise.
'''
if self.align == 1 and self.offset == 0:
# alignment 1 with offset 0 is always fulfilled
@@ -55,9 +55,9 @@ class Alignment(object):
# the external align guarantees less alignment -> not guaranteed
return False
- if external_align.align % self.align != 0:
+ if external_align.align % self.align != 0:
# the external align cannot be divided by our align
- # -> not guaranteed
+ # -> not guaranteed
# (this can only happen if there are alignments that are not
# a power of 2, which is highly discouraged. But better be
# safe and check for it)
@@ -72,7 +72,7 @@ class Alignment(object):
def combine_with(self, other):
# returns the alignment that is guaranteed when
- # both, self or other, can happen
+ # both, self or other, can happen
new_align = gcd(self.align, other.align)
new_offset_candidate1 = self.offset % new_align
new_offset_candidate2 = other.offset % new_align
@@ -83,8 +83,8 @@ class Alignment(object):
new_align = gcd(new_align, offset_diff)
new_offset_candidate1 = self.offset % new_align
new_offset_candidate2 = other.offset % new_align
- assert new_offset_candidate1 == new_offset_candidate2
- new_offset = new_offset_candidate1
+ assert new_offset_candidate1 == new_offset_candidate2
+ new_offset = new_offset_candidate1
# return the result
return Alignment(new_align, new_offset)
@@ -92,44 +92,44 @@ class Alignment(object):
class AlignmentLog(object):
def __init__(self):
- self.ok_list = []
- self.fail_list = []
- self.verbosity = 1
+ self.ok_list = []
+ self.fail_list = []
+ self.verbosity = 1
def __str__(self):
- result = ""
+ result = ""
- # output the OK-list
- for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list:
- stacksize = len(callstack)
+ # output the OK-list
+ for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list:
+ stacksize = len(callstack)
indent = ' ' * stacksize
- if self.ok_callstack_is_relevant(callstack):
+ if self.ok_callstack_is_relevant(callstack):
if field_name is None or field_name == "":
- result += (" %sok: %s:\n\t%sbefore: %s, after: %s\n"
- % (indent, str(type_obj), indent, str(align_before), str(align_after)))
- else:
- result += (" %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n"
- % (indent, str(field_name), str(type_obj),
- indent, str(align_before), str(align_after)))
+ result += (" %sok: %s:\n\t%sbefore: %s, after: %s\n"
+ % (indent, str(type_obj), indent, str(align_before), str(align_after)))
+ else:
+ result += (" %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n"
+ % (indent, str(field_name), str(type_obj),
+ indent, str(align_before), str(align_after)))
if self.verbosity >= 1:
- result += self.callstack_to_str(indent, callstack)
+ result += self.callstack_to_str(indent, callstack)
- # output the fail-list
- for (align_before, field_name, type_obj, callstack, reason) in self.fail_list:
- stacksize = len(callstack)
+ # output the fail-list
+ for (align_before, field_name, type_obj, callstack, reason) in self.fail_list:
+ stacksize = len(callstack)
indent = ' ' * stacksize
- if field_name is None or field_name == "":
- result += (" %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n"
- % (indent, str(align_before), indent, str(type_obj), indent, reason))
- else:
- result += (" %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n"
- % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason))
+ if field_name is None or field_name == "":
+ result += (" %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n"
+ % (indent, str(align_before), indent, str(type_obj), indent, reason))
+ else:
+ result += (" %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n"
+ % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason))
if self.verbosity >= 1:
- result += self.callstack_to_str(indent, callstack)
+ result += self.callstack_to_str(indent, callstack)
- return result
+ return result
def callstack_to_str(self, indent, callstack):
@@ -137,41 +137,41 @@ class AlignmentLog(object):
for stack_elem in callstack:
result += "\t %s%s\n" % (indent, str(stack_elem))
result += "\t%s]\n" % indent
- return result
+ return result
def ok_callstack_is_relevant(self, ok_callstack):
# determine whether an ok callstack is relevant for logging
- if self.verbosity >= 2:
- return True
+ if self.verbosity >= 2:
+ return True
# empty callstacks are always relevant
- if len(ok_callstack) == 0:
+ if len(ok_callstack) == 0:
return True
- # check whether the ok_callstack is a subset or equal to a fail_callstack
+ # check whether the ok_callstack is a subset or equal to a fail_callstack
for (align_before, field_name, type_obj, fail_callstack, reason) in self.fail_list:
if len(ok_callstack) <= len(fail_callstack):
zipped = zip(ok_callstack, fail_callstack[:len(ok_callstack)])
- is_subset = all([i == j for i, j in zipped])
- if is_subset:
+ is_subset = all([i == j for i, j in zipped])
+ if is_subset:
return True
return False
def ok(self, align_before, field_name, type_obj, callstack, align_after):
- self.ok_list.append((align_before, field_name, type_obj, callstack, align_after))
+ self.ok_list.append((align_before, field_name, type_obj, callstack, align_after))
def fail(self, align_before, field_name, type_obj, callstack, reason):
- self.fail_list.append((align_before, field_name, type_obj, callstack, reason))
+ self.fail_list.append((align_before, field_name, type_obj, callstack, reason))
def append(self, other):
- self.ok_list.extend(other.ok_list)
- self.fail_list.extend(other.fail_list)
+ self.ok_list.extend(other.ok_list)
+ self.fail_list.extend(other.fail_list)
def ok_count(self):
- return len(self.ok_list)
+ return len(self.ok_list)
--
cgit v1.1

71
U_python3-compat.patch Normal file
View File

@ -0,0 +1,71 @@
From bea5e1c85bdc0950913790364e18228f20395a3d Mon Sep 17 00:00:00 2001
From: Thomas Klausner <wiz@NetBSD.org>
Date: Thu, 19 May 2016 17:30:05 +0200
Subject: print() is a function and needs parentheses.
Fixes build with python-3.x.
Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
Signed-off-by: Uli Schlachter <psychon@znc.in>
---
xcbgen/xtypes.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
index c3b5758..b83b119 100644
--- a/xcbgen/xtypes.py
+++ b/xcbgen/xtypes.py
@@ -501,7 +501,7 @@ class ComplexType(Type):
int(required_start_align_element.get('align', "4"), 0),
int(required_start_align_element.get('offset', "0"), 0))
if verbose_align_log:
- print "Explicit start-align for %s: %s\n" % (self, self.required_start_align)
+ print ("Explicit start-align for %s: %s\n" % (self, self.required_start_align))
def resolve(self, module):
if self.resolved:
@@ -592,7 +592,7 @@ class ComplexType(Type):
if verbose_align_log:
print ("calc_required_start_align: %s has start-align %s"
% (str(self), str(self.required_start_align)))
- print "Details:\n" + str(log)
+ print ("Details:\n" + str(log))
if self.required_start_align.offset != 0:
print (("WARNING: %s\n\thas start-align with non-zero offset: %s"
+ "\n\tsuggest to add explicit definition with:"
@@ -619,12 +619,12 @@ class ComplexType(Type):
for offset in range(0,align):
align_candidate = Alignment(align, offset)
if verbose_align_log:
- print "trying %s for %s" % (str(align_candidate), str(self))
+ print ("trying %s for %s" % (str(align_candidate), str(self)))
my_log = AlignmentLog()
if self.is_possible_start_align(align_candidate, callstack, my_log):
log.append(my_log)
if verbose_align_log:
- print "found start-align %s for %s" % (str(align_candidate), str(self))
+ print ("found start-align %s for %s" % (str(align_candidate), str(self)))
return align_candidate
else:
my_ok_count = my_log.ok_count()
@@ -641,7 +641,7 @@ class ComplexType(Type):
# none of the candidates applies
# this type has illegal internal aligns for all possible start_aligns
if verbose_align_log:
- print "didn't find start-align for %s" % str(self)
+ print ("didn't find start-align for %s" % str(self))
log.append(best_log)
return None
@@ -900,7 +900,7 @@ class SwitchType(ComplexType):
# aux function for unchecked_get_alignment_after
def get_align_for_selected_case_field(self, case_field, start_align, callstack, log):
if verbose_align_log:
- print "get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field))
+ print ("get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field)))
total_align = start_align
for field in self.bitcases:
my_callstack = callstack[:]
--
cgit v1.1

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Wed Jan 17 13:05:11 UTC 2018 - tchvatal@suse.com
- Tweak the python conditions to pick between py2 and py3 only
do not bother with "both at once" scenario
- Apply patches to make sure we really work with python3:
* U_python-whitespace.patch
* U_python3-compat.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Jan 8 13:56:31 UTC 2018 - msrb@suse.com Mon Jan 8 13:56:31 UTC 2018 - msrb@suse.com

View File

@ -16,13 +16,12 @@
# #
%if %suse_version >= 1500
%define have_python2 0
%else
%define have_python2 1
%endif
%define dirsuffix 1.12 %define dirsuffix 1.12
%if 0%{?suse_version} >= 1500
%bcond_with python2
%else
%bcond_without python2
%endif
Name: xcb-proto Name: xcb-proto
Version: 7.6_%{dirsuffix} Version: 7.6_%{dirsuffix}
Release: 0 Release: 0
@ -30,21 +29,23 @@ Summary: The X11 Protocol: X Protocol C Bindings
License: X11 License: X11
Group: Development/Libraries/X11 Group: Development/Libraries/X11
Url: http://xorg.freedesktop.org/ Url: http://xorg.freedesktop.org/
#Git-Clone: git://anongit.freedesktop.org/xorg/proto/xcb-proto #Git-Web: https://cgit.freedesktop.org/xcb/proto
#Git-Web: http://cgit.freedesktop.org/xorg/proto/xcb-proto/
Source: http://xorg.freedesktop.org/archive/individual/xcb/%{name}-%{dirsuffix}.tar.bz2 Source: http://xorg.freedesktop.org/archive/individual/xcb/%{name}-%{dirsuffix}.tar.bz2
Patch1: U_xinput-typedef-for-event_type_base.patch Patch1: U_xinput-typedef-for-event_type_base.patch
Patch2: U_add-support-for-eventstruct.patch Patch2: U_add-support-for-eventstruct.patch
Patch3: U_SendExtensionEvent-uses-eventstruct.patch Patch3: U_SendExtensionEvent-uses-eventstruct.patch
Patch4: U_python-whitespace.patch
Patch5: U_python3-compat.patch
BuildRequires: autoconf >= 2.57 BuildRequires: autoconf >= 2.57
BuildRequires: automake BuildRequires: automake
BuildRequires: fdupes BuildRequires: fdupes
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: python-rpm-macros BuildRequires: python-rpm-macros
%if %{have_python2} %if %{with python2}
BuildRequires: python2-base BuildRequires: python2-base
%endif %else
BuildRequires: python3-base BuildRequires: python3-base
%endif
%description %description
The XCB protocol headers for X11 development. xcb-proto provides the The XCB protocol headers for X11 development. xcb-proto provides the
@ -54,16 +55,19 @@ its code and API.
%package devel %package devel
Summary: The X11 Protocol: X Protocol C Bindings Summary: The X11 Protocol: X Protocol C Bindings
Group: Development/Libraries/X11 Group: Development/Libraries/X11
Requires: python3-xcb-proto-devel = %{version}
Provides: xorg-x11-proto-devel = 7.6 Provides: xorg-x11-proto-devel = 7.6
Obsoletes: xorg-x11-proto-devel <= 7.6 Obsoletes: xorg-x11-proto-devel <= 7.6
%if %{with python2}
Requires: python2-xcb-proto-devel = %{version}
%else
Requires: python3-xcb-proto-devel = %{version}
%endif
%description devel %description devel
The XCB protocol headers for X11 development. xcb-proto provides the The XCB protocol headers for X11 development. xcb-proto provides the
XML-XCB protocol descriptions that libxcb uses to generate the majority of XML-XCB protocol descriptions that libxcb uses to generate the majority of
its code and API. its code and API.
%if %{have_python2}
%package -n python2-xcb-proto-devel %package -n python2-xcb-proto-devel
Summary: Python libraries mandatory for XML-XCB Development Summary: Python libraries mandatory for XML-XCB Development
Group: Development/Libraries/X11 Group: Development/Libraries/X11
@ -76,7 +80,6 @@ Obsoletes: python-xcb-proto-devel <= 7.6
Language-independent Python libraries that used to parse an XML description Language-independent Python libraries that used to parse an XML description
and create objects used by Python code generators in individual language and create objects used by Python code generators in individual language
bindings. bindings.
%endif
%package -n python3-xcb-proto-devel %package -n python3-xcb-proto-devel
Summary: Python libraries mandatory for XML-XCB Development Summary: Python libraries mandatory for XML-XCB Development
@ -89,43 +92,35 @@ bindings.
%prep %prep
%setup -q -n %{name}-%{dirsuffix} %setup -q -n %{name}-%{dirsuffix}
%patch1 -p1 %autopatch -p1
%patch2 -p1
%patch3 -p1
%build %build
autoreconf -fiv autoreconf -fiv
# In order to build both python2 and python3 version we need to run %if %{with python2}
# configure and install twice
%if %{have_python2}
export PYTHON="python2" export PYTHON="python2"
%configure %else
make %{?_smp_mflags}
%make_install
%endif
export PYTHON="python3" export PYTHON="python3"
%endif
%configure %configure
make %{?_smp_mflags} make %{?_smp_mflags}
%make_install
%install %install
%fdupes -s %{buildroot}/%{_prefix} %make_install
%fdupes %{buildroot}/%{_prefix}
%files devel %files devel
%dir %{_datadir}/xcb %dir %{_datadir}/xcb
%doc %{_datadir}/xcb/* %doc %{_datadir}/xcb/*
%{_libdir}/pkgconfig/*.pc %{_libdir}/pkgconfig/*.pc
%if %{have_python2} %if %{with python2}
%files -n python2-xcb-proto-devel %files -n python2-xcb-proto-devel
%doc COPYING %doc COPYING
%{python_sitelib}/xcbgen/ %{python_sitelib}/xcbgen/
%else
%files -n python3-xcb-proto-devel
%license COPYING
%{python3_sitelib}/xcbgen/
%endif %endif
%files -n python3-xcb-proto-devel
%doc COPYING
%{python3_sitelib}/xcbgen/
%changelog %changelog