[perl-ExtUtils-ParseXS/f20] Improve compatibility with C++
Petr Pisar
ppisar at fedoraproject.org
Wed Nov 20 12:06:52 UTC 2013
commit 38fb925f990d88c4098e0e7d5bc9cef09800ac79
Author: Petr Písař <ppisar at 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?= <ppisar at 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 <smueller at 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ř <ppisar at 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 <ppisar at redhat.com> - 1:3.18-292
+- Improve compatibility with C++ (bug #1032181)
+
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1:3.18-291
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
More information about the scm-commits
mailing list