commit 38fb925f990d88c4098e0e7d5bc9cef09800ac79
Author: Petr Písař <ppi...@redhat.com>
Date:   Wed Nov 20 13:02:22 2013 +0100

    Improve compatibility with C++

 ...Attempt-to-canonicalize-C-types-in-tidy_t.patch |  110 ++++++++++++++++++++
 perl-ExtUtils-ParseXS.spec                         |    9 ++-
 2 files changed, 118 insertions(+), 1 deletions(-)
---
diff --git 
a/ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch
 
b/ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch
new file mode 100644
index 0000000..24ca9a3
--- /dev/null
+++ 
b/ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch
@@ -0,0 +1,110 @@
+From 28c286718f7d2c46b9ff310bb4178b7f2258bb25 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppi...@redhat.com>
+Date: Wed, 20 Nov 2013 12:49:57 +0100
+Subject: [PATCH] EU::ParseXS: Attempt to canonicalize C++ types in tidy_type
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is a 3.18 port of perl commit:
+
+Author: Steffen Mueller <smuel...@cpan.org>
+Date:   Wed May 22 21:49:06 2013 +0200
+
+    EU::ParseXS: Attempt to canonicalize C++ types in tidy_type
+
+    Includes moving tidy_type to ExtUtils::Typemaps where it seems to
+    belong. It's a pretty poor canonicalizer, but better than nothing!
+
+<https://rt.cpan.org/Public/Bug/Display.html?id=86367>
+<https://bugzilla.redhat.com/show_bug.cgi?id=1032181>
+
+Signed-off-by: Petr Písař <ppi...@redhat.com>
+---
+ lib/ExtUtils/ParseXS/Utilities.pm |  7 +++++++
+ lib/ExtUtils/Typemaps.pm          |  7 +++++++
+ t/103-tidy_type.t                 | 27 +++++++++++++++------------
+ 3 files changed, 29 insertions(+), 12 deletions(-)
+
+diff --git a/lib/ExtUtils/ParseXS/Utilities.pm 
b/lib/ExtUtils/ParseXS/Utilities.pm
+index d0089f8..f64af35 100644
+--- a/lib/ExtUtils/ParseXS/Utilities.pm
++++ b/lib/ExtUtils/ParseXS/Utilities.pm
+@@ -201,6 +201,13 @@ String cleaned up.
+ sub tidy_type {
+   local ($_) = @_;
+ 
++  # for templated C++ types, do some bit of flawed canonicalization
++  # wrt. templates at least
++  if (/[<>]/) {
++    s/\s*([<>])\s*/$1/g;
++    s/>>/> >/g;
++  }
++
+   # rationalise any '*' by joining them into bunches and removing whitespace
+   s#\s*(\*+)\s*#$1#g;
+   s#(\*+)# $1 #g;
+diff --git a/lib/ExtUtils/Typemaps.pm b/lib/ExtUtils/Typemaps.pm
+index 2768ef0..fc4e413 100644
+--- a/lib/ExtUtils/Typemaps.pm
++++ b/lib/ExtUtils/Typemaps.pm
+@@ -973,6 +973,13 @@ sub _parse {
+ sub _tidy_type {
+   local $_ = shift;
+ 
++  # for templated C++ types, do some bit of flawed canonicalization
++  # wrt. templates at least
++  if (/[<>]/) {
++    s/\s*([<>])\s*/$1/g;
++    s/>>/> >/g;
++  }
++
+   # rationalise any '*' by joining them into bunches and removing whitespace
+   s#\s*(\*+)\s*#$1#g;
+   s#(\*+)# $1 #g ;
+diff --git a/t/103-tidy_type.t b/t/103-tidy_type.t
+index a043383..fb44aa9 100644
+--- a/t/103-tidy_type.t
++++ b/t/103-tidy_type.t
+@@ -1,23 +1,26 @@
+ #!/usr/bin/perl
+ use strict;
+ use warnings;
+-use Test::More tests =>  3;
++use Test::More;
+ use lib qw( lib );
+ use ExtUtils::ParseXS::Utilities qw(
+   tidy_type
+ );
+ 
+-my $input;
+-
+-$input = ' *  ** ';
+-is( tidy_type($input), '***',
+-    "Got expected value for '$input'" );
++my @tests = (
++  [' *  ** ', '***'],
++  [' *     ** ', '***'],
++  [' *     ** foobar  *   ', '*** foobar *'],
++  ['unsigned int', 'unsigned int'],
++  ['std::vector<int>', 'std::vector<int>'],
++  ['std::vector< unsigned int >', 'std::vector<unsigned int>'],
++  ['std::vector< vector<unsigned int> >', 'std::vector<vector<unsigned int> 
>'],
++  ['std::map< map <unsigned int, int>, int>', 'std::map<map<unsigned int, 
int>, int>'],
++);
+ 
+-$input = ' *     ** ';
+-is( tidy_type($input), '***',
+-    "Got expected value for '$input'" );
++plan tests => scalar(@tests);
+ 
+-$input = ' *     ** foobar  *  ';
+-is( tidy_type($input), '*** foobar *',
+-    "Got expected value for '$input'" );
++foreach my $test (@tests) {
++  is(tidy_type($test->[0]), $test->[1], "Tidying '$test->[0]'");
++}
+ 
+-- 
+1.8.3.1
+
diff --git a/perl-ExtUtils-ParseXS.spec b/perl-ExtUtils-ParseXS.spec
index 0bdf3f0..5c57f03 100644
--- a/perl-ExtUtils-ParseXS.spec
+++ b/perl-ExtUtils-ParseXS.spec
@@ -2,12 +2,15 @@ Name:           perl-ExtUtils-ParseXS
 # Epoch to compete with perl.spec
 Epoch:          1
 Version:        3.18
-Release:        291%{?dist}
+Release:        292%{?dist}
 Summary:        Module and a script for converting Perl XS code into C code
 License:        GPL+ or Artistic
 Group:          Development/Libraries
 URL:            http://search.cpan.org/dist/ExtUtils-ParseXS/
 Source0:        
http://www.cpan.org/authors/id/S/SM/SMUELLER/ExtUtils-ParseXS-%{version}.tar.gz
+# Improve compatibility with C++, CPAN RT#86367, bug #1032181,
+# in upstream 3.18_03
+Patch0:         
ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch
 BuildArch:      noarch
 BuildRequires:  perl
 BuildRequires:  perl(Config)
@@ -45,6 +48,7 @@ the glue necessary to let Perl access those functions.
 
 %prep
 %setup -q -n ExtUtils-ParseXS-%{version}
+%patch0 -p1
 
 %build
 perl Makefile.PL INSTALLDIRS=vendor
@@ -69,6 +73,9 @@ make test
 %{_mandir}/man3/*
 
 %changelog
+* Wed Nov 20 2013 Petr Pisar <ppi...@redhat.com> - 1:3.18-292
+- Improve compatibility with C++ (bug #1032181)
+
 * Sat Aug 03 2013 Fedora Release Engineering <rel-...@lists.fedoraproject.org> 
- 1:3.18-291
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
 
--
Fedora Extras Perl SIG
http://www.fedoraproject.org/wiki/Extras/SIGs/Perl
perl-devel mailing list
perl-devel@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/perl-devel

Reply via email to