commit 38fb925f990d88c4098e0e7d5bc9cef09800ac79 Author: Petr Písař <ppisar@xxxxxxxxxx> 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@xxxxxxxxxx> +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@xxxxxxxx> +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@xxxxxxxxxx> +--- + 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@xxxxxxxxxx> - 1:3.18-292 +- Improve compatibility with C++ (bug #1032181) + * Sat Aug 03 2013 Fedora Release Engineering <rel-eng@xxxxxxxxxxxxxxxxxxxxxxx> - 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@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/perl-devel