[perl-Qt] Add some fixes from upstream git for Perl 5.18 compatibility
Paul Howarth
pghmcfc at fedoraproject.org
Fri Aug 30 18:36:22 UTC 2013
commit 11aa26b42e96b72be098e3abac53f22a4090bb8e
Author: Paul Howarth <paul at city-fan.org>
Date: Fri Aug 30 19:35:57 2013 +0100
Add some fixes from upstream git for Perl 5.18 compatibility
0001-Changes-to-support-perl-5.18.0.patch | 480 +++++++++++++++++++++++++++++
0002-Fixes-for-perl-5.18.patch | 153 +++++++++
perl-Qt.spec | 12 +-
3 files changed, 644 insertions(+), 1 deletions(-)
---
diff --git a/0001-Changes-to-support-perl-5.18.0.patch b/0001-Changes-to-support-perl-5.18.0.patch
new file mode 100644
index 0000000..96ba9c9
--- /dev/null
+++ b/0001-Changes-to-support-perl-5.18.0.patch
@@ -0,0 +1,480 @@
+From aa2083b40c83fad6b931a2088ae69bc206a7edc7 Mon Sep 17 00:00:00 2001
+From: Chris Burel <chrisburel at gmail.com>
+Date: Fri, 23 Aug 2013 12:04:01 -0700
+Subject: [PATCH 1/2] Changes to support perl 5.18.0.
+
+Perl no longer calls the AUTOLOAD method for DESTROY. So that has to be defined explicitly.
+It also didn't like bless \shift, $package, so I've changed that as well.
+defined @array is deprecated, update that code.
+Also remove spurious breakpoints in example code.
+Also, CMake seems to have changed, so the prove "macro" is now a function, because functions support actual scope on cmake variables.
+---
+ cmake/MacroProve.cmake | 4 +-
+ qtcore/lib/QtCore4.pm | 85 ++++-----
+ qtcore/src/QtCore4.xs | 2 +
+ qtcore/src/util.cpp | 190 ++++++++++++---------
+ qtcore/src/util.h | 1 +
+ qtcore/t/d_sigslot.t | 1 -
+ qtcore/t/qabstractitemmodel.t | 1 -
+ qtgui/examples/tools/customcompleter/TextEdit.pm | 1 -
+ .../tools/settingseditor/VariantDelegate.pm | 1 -
+ qtgui/t/itemviewspuzzle.t | 2 -
+ 10 files changed, 154 insertions(+), 134 deletions(-)
+
+SKIP diff --git a/cmake/MacroProve.cmake b/cmake/MacroProve.cmake
+SKIP index 13387af..489878a 100644
+SKIP --- a/cmake/MacroProve.cmake
+SKIP +++ b/cmake/MacroProve.cmake
+SKIP @@ -1,5 +1,5 @@
+SKIP
+SKIP -MACRO( MACRO_PROVE _testname _path)
+SKIP +FUNCTION( MACRO_PROVE _testname _path)
+SKIP
+SKIP if(WIN32)
+SKIP set(prove_cmd "prove.bat")
+SKIP @@ -20,4 +20,4 @@ MACRO( MACRO_PROVE _testname _path)
+SKIP endif(_workingdir)
+SKIP
+SKIP add_test(${_testname} ${prove_cmd} ${prove_args} ${escaped_path})
+SKIP -ENDMACRO( MACRO_PROVE _testname _path )
+SKIP +ENDFUNCTION( MACRO_PROVE _testname _path )
+diff --git a/qtcore/lib/QtCore4.pm b/qtcore/lib/QtCore4.pm
+index b14e817..0459dd8 100644
+--- a/qtcore/lib/QtCore4.pm
++++ b/qtcore/lib/QtCore4.pm
+@@ -1301,12 +1301,15 @@ sub init_class {
+
+ foreach my $sp ('', ' ') {
+ my $where = $sp . $perlClassName;
+- installautoload($where);
+- # Putting this in one package gives XS_AUTOLOAD one spot to look for
+- # the autoload variable
+- package Qt::AutoLoad;
+- my $autosub = \&{$where . '::_UTOLOAD'};
+- Qt::_internal::installSub( $where.'::AUTOLOAD', sub{&$autosub} );
++
++ if (!exists &{$where . '::AUTOLOAD'}) {
++ installautoload($where);
++ # Putting this in one package gives XS_AUTOLOAD one spot to look for
++ # the autoload variable
++ package Qt::AutoLoad;
++ my $autosub = \&{$where . '::_UTOLOAD'};
++ Qt::_internal::installSub( $where.'::AUTOLOAD', sub{&$autosub} );
++ }
+ }
+
+ installSub("$perlClassName\::NEW", sub {
+@@ -1417,9 +1420,9 @@ sub makeMetaData {
+ my $signals = $meta->{signals};
+ my $slots = $meta->{slots};
+
+- @{$classinfos} = () if !defined @{$classinfos};
+- @{$signals} = () if !defined @{$signals};
+- @{$slots} = () if !defined @{$slots};
++ @{$classinfos} = () if !defined $classinfos;
++ @{$signals} = () if !defined $signals;
++ @{$slots} = () if !defined $slots;
+
+ # Each entry in 'stringdata' corresponds to a string in the
+ # qt_meta_stringdata_<classname> structure.
+@@ -1805,67 +1808,67 @@ Qt::_internal::installSub(' Qt::Variant::value', sub {
+ });
+
+ sub String {
+- if ( @_ ) {
+- return bless \shift, 'Qt::String';
+- } else {
+- return bless '', 'Qt::String';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::String';
+ }
+
+ sub CString {
+- if ( @_ ) {
+- return bless \shift, 'Qt::CString';
+- } else {
+- return bless '', 'Qt::CString';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::CString';
+ }
+
+ sub Int {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Int';
+- } else {
+- return bless '', 'Qt::Int';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Int';
+ }
+
+ sub Uint {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Uint';
+- } else {
+- return bless '', 'Qt::Uint';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Uint';
+ }
+
+ sub Bool {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Bool';
+- } else {
+- return bless '', 'Qt::Bool';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Bool';
+ }
+
+ sub Short {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Short';
+- } else {
+- return bless '', 'Qt::Short';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Short';
+ }
+
+ sub Ushort {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Ushort';
+- } else {
+- return bless '', 'Qt::Ushort';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Ushort';
+ }
+
+ sub Uchar {
+- if ( @_ ) {
+- return bless \shift, 'Qt::Uchar';
+- } else {
+- return bless '', 'Qt::Uchar';
++ my ($val) = @_;
++ if ( !$val ) {
++ $val = '';
+ }
++ return bless \$val, 'Qt::Uchar';
+ }
+
+ 1;
+diff --git a/qtcore/src/QtCore4.xs b/qtcore/src/QtCore4.xs
+index fd219c5..a699132 100644
+--- a/qtcore/src/QtCore4.xs
++++ b/qtcore/src/QtCore4.xs
+@@ -249,6 +249,8 @@ installautoload( package )
+ char* autoload = new char[strlen(package) + 11];
+ sprintf(autoload, "%s::_UTOLOAD", package);
+ newXS(autoload, XS_AUTOLOAD, __FILE__);
++ sprintf(autoload, "%s::DESTROY", package);
++ newXS(autoload, XS_DESTROY, __FILE__);
+ delete[] autoload;
+
+ void
+diff --git a/qtcore/src/util.cpp b/qtcore/src/util.cpp
+index f66fb6b..a163e7e 100644
+--- a/qtcore/src/util.cpp
++++ b/qtcore/src/util.cpp
+@@ -1939,6 +1939,109 @@ XS(XS_qvariant_from_value) {
+ XSRETURN(1);
+ }
+
++XS(XS_DESTROY) {
++ dXSARGS;
++ PERL_SET_CONTEXT(PL_curinterp);
++ char* package = HvNAME(SvSTASH(SvRV(ST(0))));
++ ++package;
++
++#ifdef PERLQTDEBUG
++ if( do_debug && ( do_debug & qtdb_autoload ) ) {
++ fprintf(stderr, "In XS DESTROY for %s", package);
++ if((do_debug & qtdb_verbose)) {
++ smokeperl_object *o = sv_obj_info(ST(0));
++ if(o)
++ fprintf(stderr, " - SV*: %p this: (%s)%p\n", ST(0), o->smoke->classes[o->classId].className, o->ptr);
++ else
++ fprintf(stderr, " - this: (unknown)(nil)\n");
++ }
++ else {
++ fprintf(stderr, "\n");
++ }
++ }
++#endif
++
++ // For anything we do here where withObject is true, sv_this should be set
++ // to the first argument on the stack, since that's where perl puts it.
++ // Wherever we return, be sure to restore sv_this.
++ SV* old_this = 0;
++ old_this = sv_this;
++ sv_this = newSVsv(ST(0));
++
++ smokeperl_object* o = sv_obj_info(sv_this);
++
++ // Check to see that o exists (has a smokeperl_object in sv_this), has
++ // a valid pointer, and (is allocated or has an entry in the pointer
++ // map). If all of that's true, or we're in global destruction, we
++ // don't really care what happens.
++ if( PL_dirty ) {
++ // This block will be repeated a lot to clean stuff up.
++ // Restore sv_this
++ SvREFCNT_dec(sv_this);
++ sv_this = old_this;
++ XSRETURN_YES;
++ }
++ if( !(o && o->ptr && (o->allocated || getPointerObject(o->ptr))) ) {
++ // This block will be repeated a lot to clean stuff up.
++ // Restore sv_this
++ SvREFCNT_dec(sv_this);
++ sv_this = old_this;
++ XSRETURN_YES;
++ }
++
++ // Check to see if a delete of this object has been tried before, by
++ // seeing if the object's hash has the "has been hidden" key
++ static const char* key = "has been hidden";
++ U32 klen = 15;
++ SV** svp = 0;
++ if( SvROK(sv_this) && SvTYPE(SvRV(sv_this)) == SVt_PVHV ) {
++ HV* hv = (HV*)SvRV(sv_this);
++ svp = hv_fetch( hv, key, klen, 0);
++ }
++ if(svp) {
++ // Found "has been hidden", so don't do anything, just clean up
++ // Restore sv_this
++ SvREFCNT_dec(sv_this);
++ sv_this = old_this;
++ XSRETURN_YES;
++ }
++
++#ifdef PERLQTDEBUG
++ // The following perl call seems to stomp on the package name, let's copy it
++ char* packagecpy = new char[strlen(package)+1];
++ strcpy( packagecpy, package );
++#endif
++
++ // Call the ON_DESTROY method, that stores a reference (increasing the
++ // refcnt) if necessary
++ HV* stash = gv_stashpv(package, TRUE);
++ GV* gv = gv_fetchmethod_autoload(stash, "ON_DESTROY", 0);
++ int retval = 0;
++ if( gv ) {
++ PUSHMARK(SP);
++ int count = call_sv((SV*)GvCV(gv), G_SCALAR|G_NOARGS);
++ SPAGAIN;
++ if (count != 1) {
++ // Restore sv_this
++ SvREFCNT_dec(sv_this);
++ sv_this = old_this;
++ croak( "Corrupt ON_DESTROY return value: Got %d value(s), expected 1\n", count );
++ }
++ retval = POPi;
++ PUTBACK;
++ }
++
++#ifdef PERLQTDEBUG
++ if( do_debug && retval && (do_debug & qtdb_gc) )
++ fprintf(stderr, "Increasing refcount in DESTROY for %s=%p (still has a parent)\n", packagecpy, o->ptr);
++ delete[] packagecpy;
++#endif
++
++ // Now clean up
++ SvREFCNT_dec(sv_this);
++ sv_this = old_this;
++}
++
+ XS(XS_AUTOLOAD) {
+ dXSARGS;
+ PERL_SET_CONTEXT(PL_curinterp);
+@@ -2045,95 +2148,12 @@ XS(XS_AUTOLOAD) {
+ else
+ XSRETURN(count);
+ }
+- else if( !strcmp( methodname, "DESTROY" ) ) {
+- smokeperl_object* o = sv_obj_info(sv_this);
+-
+- // Check to see that o exists (has a smokeperl_object in sv_this), has
+- // a valid pointer, and (is allocated or has an entry in the pointer
+- // map). If all of that's true, or we're in global destruction, we
+- // don't really care what happens.
+- if( PL_dirty ) {
+- // This block will be repeated a lot to clean stuff up.
+- if( withObject ) {
+- // Restore sv_this
+- SvREFCNT_dec(sv_this);
+- sv_this = old_this;
+- }
+- XSRETURN_YES;
+- }
+- if( !(o && o->ptr && (o->allocated || getPointerObject(o->ptr))) ) {
+- // This block will be repeated a lot to clean stuff up.
+- if( withObject ) {
+- // Restore sv_this
+- SvREFCNT_dec(sv_this);
+- sv_this = old_this;
+- }
+- XSRETURN_YES;
+- }
+-
+- // Check to see if a delete of this object has been tried before, by
+- // seeing if the object's hash has the "has been hidden" key
+- static const char* key = "has been hidden";
+- U32 klen = 15;
+- SV** svp = 0;
+- if( SvROK(sv_this) && SvTYPE(SvRV(sv_this)) == SVt_PVHV ) {
+- HV* hv = (HV*)SvRV(sv_this);
+- svp = hv_fetch( hv, key, klen, 0);
+- }
+- if(svp) {
+- // Found "has been hidden", so don't do anything, just clean up
+- if( withObject ) {
+- // Restore sv_this
+- SvREFCNT_dec(sv_this);
+- sv_this = old_this;
+- }
+- XSRETURN_YES;
+- }
+-
+-#ifdef PERLQTDEBUG
+- // The following perl call seems to stomp on the package name, let's copy it
+- char* packagecpy = new char[strlen(package)+1];
+- strcpy( packagecpy, package );
+-#endif
+-
+- // Call the ON_DESTROY method, that stores a reference (increasing the
+- // refcnt) if necessary
+- if( !stash )
+- stash = gv_stashpv(package, TRUE);
+- gv = gv_fetchmethod_autoload(stash, "ON_DESTROY", 0);
+- int retval = 0;
+- if( gv ) {
+- PUSHMARK(SP);
+- int count = call_sv((SV*)GvCV(gv), G_SCALAR|G_NOARGS);
+- SPAGAIN;
+- if (count != 1) {
+- if( withObject ) {
+- // Restore sv_this
+- SvREFCNT_dec(sv_this);
+- sv_this = old_this;
+- }
+- croak( "Corrupt ON_DESTROY return value: Got %d value(s), expected 1\n", count );
+- }
+- retval = POPi;
+- PUTBACK;
+- }
+-
+-#ifdef PERLQTDEBUG
+- if( do_debug && retval && (do_debug & qtdb_gc) )
+- fprintf(stderr, "Increasing refcount in DESTROY for %s=%p (still has a parent)\n", packagecpy, o->ptr);
+- delete[] packagecpy;
+-#endif
+-
+- // Now clean up
+- if( withObject ) {
+- SvREFCNT_dec(sv_this);
+- sv_this = old_this;
+- }
+- }
+ else {
+ // We're calling a c++ method
+
+ // Get the classId (eventually converting SUPER to the right Qt4 class)
++ if (super && strcmp( super, "SUPER" ) == 0)
++ package[strlen(package)-7] = 0;
+ SV* moduleIdRef = package_classId( package );
+ Smoke::ModuleIndex mi;
+
+diff --git a/qtcore/src/util.h b/qtcore/src/util.h
+index bd4bf31..430a8eb 100644
+--- a/qtcore/src/util.h
++++ b/qtcore/src/util.h
+@@ -98,6 +98,7 @@ XS(XS_qdatastream_readrawdata);
+ XS(XS_qvariant_value);
+ XS(XS_qvariant_from_value);
+
++XS(XS_DESTROY);
+ XS(XS_AUTOLOAD);
+ XS(XS_qt_metacall);
+ XS(XS_signal);
+diff --git a/qtcore/t/d_sigslot.t b/qtcore/t/d_sigslot.t
+index eea16c8..3d02f2e 100644
+--- a/qtcore/t/d_sigslot.t
++++ b/qtcore/t/d_sigslot.t
+@@ -30,7 +30,6 @@ sub NEW {
+ emit signal( 5, 4 );
+
+ # 3) Emit a signal, but missing an argument. Should fail.
+- $DB::single=1;
+ eval{ emit signalWithBadArg() };
+ like( $@, qr/Wrong number of arguments in signal call/, 'Missing arguments in signal' );
+ }
+diff --git a/qtcore/t/qabstractitemmodel.t b/qtcore/t/qabstractitemmodel.t
+index ae1174c..3e2baba 100644
+--- a/qtcore/t/qabstractitemmodel.t
++++ b/qtcore/t/qabstractitemmodel.t
+@@ -4,7 +4,6 @@ package TestModel;
+
+ use strict;
+ use warnings;
+-use blib;
+ use QtCore4;
+ use QtCore4::isa qw( Qt::AbstractItemModel );
+
+diff --git a/qtgui/examples/tools/customcompleter/TextEdit.pm b/qtgui/examples/tools/customcompleter/TextEdit.pm
+index 9b4e26f..3e82ae4 100644
+--- a/qtgui/examples/tools/customcompleter/TextEdit.pm
++++ b/qtgui/examples/tools/customcompleter/TextEdit.pm
+@@ -61,7 +61,6 @@ sub insertCompletion
+ return;
+ }
+ my $tc = textCursor();
+- $DB::single=1;
+ my $extra = length($completion) - length(c->completionPrefix());
+ $tc->movePosition(Qt::TextCursor::Left());
+ $tc->movePosition(Qt::TextCursor::EndOfWord());
+diff --git a/qtgui/examples/tools/settingseditor/VariantDelegate.pm b/qtgui/examples/tools/settingseditor/VariantDelegate.pm
+index 5d91d3f..e450efb 100644
+--- a/qtgui/examples/tools/settingseditor/VariantDelegate.pm
++++ b/qtgui/examples/tools/settingseditor/VariantDelegate.pm
+@@ -197,7 +197,6 @@ sub setModelData
+ }
+
+ my $text = $lineEdit->text();
+- $DB::single=1;
+ my $validator = $lineEdit->validator();
+ if ($validator) {
+ my $pos;
+SKIP diff --git a/qtgui/t/itemviewspuzzle.t b/qtgui/t/itemviewspuzzle.t
+SKIP index 4a6b623..ea1c07e 100644
+SKIP --- a/qtgui/t/itemviewspuzzle.t
+SKIP +++ b/qtgui/t/itemviewspuzzle.t
+SKIP @@ -85,8 +85,6 @@ sub initTestCase {
+SKIP Qt::Test::qWaitForWindowShown( $window );
+SKIP this->{window} = $window;
+SKIP pass( 'Window shown' );
+SKIP - $DB::single=1;
+SKIP - 1;
+SKIP }
+SKIP
+SKIP package main;
+SKIP --
+SKIP 1.8.3.1
+SKIP
diff --git a/0002-Fixes-for-perl-5.18.patch b/0002-Fixes-for-perl-5.18.patch
new file mode 100644
index 0000000..a1a71e0
--- /dev/null
+++ b/0002-Fixes-for-perl-5.18.patch
@@ -0,0 +1,153 @@
+From d4627fb5f3a571212457df22e2ab861b890fc992 Mon Sep 17 00:00:00 2001
+From: Chris Burel <chrisburel at gmail.com>
+Date: Fri, 23 Aug 2013 14:56:37 -0700
+Subject: [PATCH 2/2] Fixes for perl 5.18
+
+I'm not really sure how this was working before, but perl 5.18 really wasn't
+happy. The way these functions work is really tricky, because the marshallers
+expect to be able to set the scalar ref's returned from them. My previous fix
+didn't allow the refs to be set correctly.
+---
+ qtcore/lib/QtCore4.pm | 90 +++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 58 insertions(+), 32 deletions(-)
+
+diff --git a/qtcore/lib/QtCore4.pm b/qtcore/lib/QtCore4.pm
+index 0459dd8..1a5e454 100644
+--- a/qtcore/lib/QtCore4.pm
++++ b/qtcore/lib/QtCore4.pm
+@@ -1649,6 +1649,8 @@ package Qt;
+ use strict;
+ use warnings;
+
++use Scalar::Util;
++
+ # Called in the DESTROY method for all QObjects to see if they still have a
+ # parent, and avoid deleting them if they do.
+ sub Qt::Object::ON_DESTROY {
+@@ -1808,67 +1810,91 @@ Qt::_internal::installSub(' Qt::Variant::value', sub {
+ });
+
+ sub String {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::String';
++ }
++ return bless \shift, 'Qt::String';
+ }
+- return bless \$val, 'Qt::String';
++ return bless '', 'Qt::String';
+ }
+
+ sub CString {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::CString';
++ }
++ return bless \shift, 'Qt::CString';
+ }
+- return bless \$val, 'Qt::CString';
++ return bless '', 'Qt::CString';
+ }
+
+ sub Int {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Int';
++ }
++ return bless \shift, 'Qt::Int';
+ }
+- return bless \$val, 'Qt::Int';
++ return bless '', 'Qt::Int';
+ }
+
+ sub Uint {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Uint';
++ }
++ return bless \shift, 'Qt::Uint';
+ }
+- return bless \$val, 'Qt::Uint';
++ return bless '', 'Qt::Uint';
+ }
+
+ sub Bool {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Bool';
++ }
++ return bless \shift, 'Qt::Bool';
+ }
+- return bless \$val, 'Qt::Bool';
++ return bless '', 'Qt::Bool';
+ }
+
+ sub Short {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Short';
++ }
++ return bless \shift, 'Qt::Short';
+ }
+- return bless \$val, 'Qt::Short';
++ return bless '', 'Qt::Short';
+ }
+
+ sub Ushort {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Ushort';
++ }
++ return bless \shift, 'Qt::Ushort';
+ }
+- return bless \$val, 'Qt::Ushort';
++ return bless '', 'Qt::Ushort';
+ }
+
+ sub Uchar {
+- my ($val) = @_;
+- if ( !$val ) {
+- $val = '';
++ if ( scalar @_ ) {
++ if ( Scalar::Util::readonly( $_[0] ) ) {
++ my $val = shift;
++ return bless \$val, 'Qt::Uchar';
++ }
++ return bless \shift, 'Qt::Uchar';
+ }
+- return bless \$val, 'Qt::Uchar';
++ return bless '', 'Qt::Uchar';
+ }
+
+ 1;
+--
+1.8.3.1
+
diff --git a/perl-Qt.spec b/perl-Qt.spec
index f85557e..bbb28e0 100644
--- a/perl-Qt.spec
+++ b/perl-Qt.spec
@@ -1,6 +1,6 @@
Name: perl-Qt
Version: 0.96.0
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: Perl bindings for Qt
# Files under qtcore/tools/ and qtdbus/tools/ are LGPLv2.1+ with Nokia
# exceptions or GPLv3+. The Nokia files only appear in -devel subpackage.
@@ -9,6 +9,8 @@ License: GPLv2+ and (GPL+ or Artistic)
Group: Development/Libraries
URL: http://search.cpan.org/dist/Qt/
Source0: http://www.cpan.org/modules/by-module/Qt/Qt-%{version}.tar.gz
+Patch1: 0001-Changes-to-support-perl-5.18.0.patch
+Patch2: 0002-Fixes-for-perl-5.18.patch
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
BuildRequires: cmake
@@ -53,6 +55,11 @@ Development files for perl-Qt.
%prep
%setup -q -n Qt-%{version}
+
+# Fixes from upstream for Perl 5.18
+%patch1 -p1
+%patch2 -p1
+
mkdir build
# fix smoke qwt detection
@@ -109,6 +116,9 @@ make test
%{_datadir}/perlqt
%changelog
+* Fri Aug 30 2013 Paul Howarth <paul at city-fan.org> - 0.96.0-9
+- Add some fixes from upstream git for Perl 5.18 compatibility
+
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.96.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
More information about the scm-commits
mailing list