diff --git a/SOURCES/ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch b/SOURCES/ExtUtils-ParseXS-3.18-EU-ParseXS-Attempt-to-canonicalize-C-types-in-tidy_t.patch new file mode 100644 index 00000000..24ca9a3a --- /dev/null +++ b/SOURCES/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?= +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 +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! + + + + +Signed-off-by: Petr Písař +--- + 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', 'std::vector'], ++ ['std::vector< unsigned int >', 'std::vector'], ++ ['std::vector< vector >', 'std::vector >'], ++ ['std::map< map , int>', 'std::map, 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/SPECS/perl-ExtUtils-ParseXS.spec b/SPECS/perl-ExtUtils-ParseXS.spec new file mode 100644 index 00000000..b3b8c831 --- /dev/null +++ b/SPECS/perl-ExtUtils-ParseXS.spec @@ -0,0 +1,83 @@ +Name: perl-ExtUtils-ParseXS +# Epoch to compete with perl.spec +Epoch: 1 +Version: 3.18 +Release: 3%{?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 #1078438, +# 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) +BuildRequires: perl(ExtUtils::MakeMaker) >= 6.46 +BuildRequires: perl(File::Spec) +BuildRequires: perl(strict) +BuildRequires: perl(warnings) +# Run-time: +BuildRequires: perl(Cwd) +BuildRequires: perl(Exporter) +# ExtUtils::XSSymSet not needed +BuildRequires: perl(File::Basename) +# Getopt::Long not tested +BuildRequires: perl(lib) +BuildRequires: perl(re) +BuildRequires: perl(Symbol) +# Tests: +BuildRequires: perl-devel +BuildRequires: perl(attributes) +BuildRequires: perl(Carp) +BuildRequires: perl(DynaLoader) +BuildRequires: perl(ExtUtils::CBuilder) +BuildRequires: perl(File::Temp) +BuildRequires: perl(overload) +BuildRequires: perl(Test::More) >= 0.47 +Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) +Requires: perl-devel +# perl-ExtUtils-Typemaps has been merged into perl-ExtUtils-ParseXS, bug #891952 +Obsoletes: perl-ExtUtils-Typemaps + +%description +ExtUtils::ParseXS will compile XS code into C code by embedding the +constructs necessary to let C functions manipulate Perl values and creates +the glue necessary to let Perl access those functions. + +%prep +%setup -q -n ExtUtils-ParseXS-%{version} +%patch0 -p1 + +%build +perl Makefile.PL INSTALLDIRS=vendor +make %{?_smp_mflags} + +%install +make pure_install DESTDIR=$RPM_BUILD_ROOT +find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \; +%{_fixperms} $RPM_BUILD_ROOT/* +# Do not install xsubpp twice, RT#117289 +rm $RPM_BUILD_ROOT%{perl_vendorlib}/ExtUtils/xsubpp +ln -s ../../../../bin/xsubpp $RPM_BUILD_ROOT%{perl_vendorlib}/ExtUtils/ + +%check +make test + +%files +%doc Changes README +%{_bindir}/* +%{perl_vendorlib}/* +%{_mandir}/man1/* +%{_mandir}/man3/* + +%changelog +* Thu Mar 20 2014 Petr Pisar - 1:3.18-3 +- Improve compatibility with C++ (bug #1078438) + +* Fri Dec 27 2013 Daniel Mach - 1:3.18-2 +- Mass rebuild 2013-12-27 + +* Fri Mar 22 2013 Petr Pisar 1:3.18-1 +- Specfile autogenerated by cpanspec 1.78.